2014-04-11 2 views
0
char* func() 
{ 
    const int size = 24; 
    char bin[size]; 
    char *temp; 
    for(int i=0; i<23; i++) 
    bin[i] = '1'; 
    bin[23] = '\0'; 
    temp = bin; 
    return temp; 
} 

int main() 
{ 
    char *s; 
    s = func(); 
    cout << s << endl; //prints out weird values 

    return 0; 
} 

컴파일 및 실행시 임의 값이 인쇄됩니다. 함수 func에서 char 배열을 초기화하고 그것을 반환하려고했습니다. 그것을 반환하고 메인에 인쇄하면 이상한 값을 출력합니다. 뭐가 잘못 되었 니? 어떤 도움을 주시면 감사하겠습니다.함수에서 문자 배열을 초기화하고 반환하면 주에 잘못된 출력이 발생합니다.

답변

0

실행을 완료 한 함수의 스택처럼 해제 된 공간에 대한 포인터를 사용하면 안됩니다.
정의되지 않은 동작은 아무리 뛰어 다니는 속담이 있어도, 귀신이 당신의 코에서 날아간다는 것을 의미합니다.

당신의 선택 :

  • 사용 발신자-할당 된 버퍼.
  • 정적 버퍼를 사용하십시오 (재진입 성 문제 및 멀티 스레딩 문제에주의하십시오).
  • 동적 할당을 사용하십시오 (new, new[], malloc() 및 친구들).
  • 데이터를 포함하는 struct (표준 컨테이너 또는 기타)를 반환합니다. 동적 할당을 사용할 수도 있습니다. (Matt McNabb의 마지막 요령).
+0

- 데이터가 들어있는 구조체 (표준 컨테이너 또는 기타)를 반환하십시오. –

+0

@MattMcNabb : 물론 그래도 작동합니다. – Deduplicator

1
char bin[size]; 

스택에 메모리를 할당, 당신은 함수가 반환 한 후에 해당 위치를 참조 할 수 없습니다 : "문자 *들"잘못된 메모리 위치를 참조 값이 할당된다.

관련 문제