약식데스암호 코딩 중에서 질문인데요...

seojh1431의 이미지

void main()

{
int *test;

test=aaa();
printf("%d %d %d %d %d %d", test[1],test[2],test[3],test[4],test[6],test[5]);

}

int aaa(void)
{
int aa[10]={1,5,4,6,34,3,2,3,4};
return aa;
}

제가 대스암호를 코딩하고 있는데 짜는 과정에 위 소스처럼(그냥 위 코드는 예시이구요, 코드 받아서 오류 수정해주실 분 드릴 수 있어요 메일 남기시면..) main에서 aaa를 호출하면 aa라는 배열을 반환하고 메인에서는 그것을 test라는 포인터변수로 받아주고 있는데

지금 데스 코딩하면서 위 과정과 같이 다른함수에서(대스에서는 제가 선언한 함수에서 리턴값을 받습니다.) 라운드(라운드키를 생성합니다.) 라는 함수를 호출하면 포인터변수로 받거든요.. 근데 실행은 되는데
실행 과정에서 중단이 떠버리네요.. 이거 왜이런거죠??? 소스 드릴 수도 있어요~ 가르쳐주세요

mirheekl의 이미지

aaa안의 aa[]는 함수 안에서만 사용이 보장된 변수입니다. 그냥 포인터만 넘겨받으면 사용할 수가 없습니다.

외부에서 사용하시려면 몇 가지 방법이 있는데 상황에 따라 사용하시면 됩니다.

1. 정적 변수로 선언.
2. 전역 변수로 선언.
3. malloc, new등으로 heap으로부터 할당.
4. 포인터로 넘겨받지 말고 배열 자체를 복사.
등등등등..

--