2012-04-15 6 views
0
char* pArray = nullptr; 
{ 
    char buffer[64]; 
    sprintf_s(buffer,"Time: 123456"); 
    pArray = buffer; 

} 
cout<<pArray<<endl; 

버퍼가 스택에 다시 할당 해제 되더라도 "시간 : 123456"이 표시됩니다. 여기서 무슨 일이 일어나고있는거야? 이거 안전한가요? 안전하지 않음?C++ char 배열 범위

+0

아니요, 안전하지 않습니다. 그것의'정의되지 않은 행동'. – scientiaesthete

+0

같은 질문을하므로 20 ~ 30 개의 게시물이 있습니다. –

답변

1

정의되지 않은 동작. 메모리가 지워지지 않았을 수 있습니다.

귀하의 인쇄 진술서는 순수한 행운입니다. 객체가 범위를 벗어나거나 삭제되면 메모리는 해제 된 것으로 표시되고 실제로 지워지지 않습니다. 프로그램은 그것을 되 살리고 그것을 덮어 쓸 수 있습니다.

0

더 이상 메모리를 사용하지 않지만 데이터는 계속 남아 있습니다.

자신이하는 일을 알지 못한다면 그렇게해서는 안됩니다.

그런 해킹을 사용하여 일부 매개 변수를 함수에 전달할 수는 있지만 매우 안전하지 않습니다.