char ptr의 출력과 관련하여 문제가 있습니다. 내가 실행하려고 샘플 코드 .. 내가 메인에 들어갈char 포인터 결과가 잘못 출력됩니다.
struct DeviceInfo{
char * name;
int id;
};
void testFunc(DeviceInfo *info){
char temp[50] = "test input";
info->name = temp;
}
void main(){
DeviceInfo deviceInfo;
testFunc(&deviceInfo);
std::cout<<"Output is "<<deviceInfo.name;
}
출력 이상한 하나의 어떤 종류 .... 는 "test.name"이 때 내가 알아 있음을 디버깅하는 동안입니다 다음 가비지 출력을 제공 할뿐만 아니라 "deviceInfo"객체의 "name"값을 해당 가비지 값으로 변경합니다 ... 이것은 테스트 시나리오의 일종이지만 실제 응용 프로그램에서는이 testFunc를 실행해야합니다 같은 방식으로 즉, 상수 char 문자열은 char ptr에 이름을 할당해야합니다.
저는이 temp [strlen (temp)] = '\ 0'과 같이 char temp의 끝에 '\ 0'을 넣으려고했습니다.
는하지만 여전히
라자
아마도 temp [50]이 범위를 벗어나고 'name'이 할당 해제 된 메모리를 가리키고있을 수도 있습니다. testFunc 내부에'cout'을 넣고 무슨 일이 일어나는지 보려고합니다. –
"temp"변수를 제거하면 작동합니다. 함수가 반환 될 때 귀하의 임시 "임시"배열 할당이 해제되고 생각합니다. –
가능한 [로컬 변수의 메모리가 범위 외부에서 액세스 될 수 있습니까?] (http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope) –