2011-03-11 8 views
1
typedef struct class { 
    char* CLASS_ID; 
    char* CLASS_NAME; 
} 

30-40 관련없는 코드 행에서 두 문자열의 값이 손실되는 원인은 무엇입니까? (getString()이라는 함수에서 리턴 된 포인터에 할당 됨).문자열이 구조체에 제대로 저장되지 않습니다.

+0

CLASS_ID 및 CLASS_NAME의 반환 값은 둘 다 getString() 호출을 사용하여 초기화 된 후에 인쇄해야하는 경우 그대로 유지됩니까? 두 번째 호출 후 잘못된 경우 getString()에 문제가있을 수 있습니다. 당신이 무엇을 발견했는지 알려주고 거기에서 갈 수 있습니다. – chkdsk

+0

코드를 읽지 않아도 문제가 해결되지 않으면 디버거가 메모리를 통해 작성하는 코드를 알려줍니다. –

답변

2

아마도 getString()은 호출 될 때마다 값이 덮어 쓰여지는 정적으로 할당 된 버퍼에 대한 포인터를 반환합니까?

어쩌면 배열이 오버플로되어 스택 또는 힙이 손상되었을 수 있습니까?

아마도 스택에 할당되었고 범위를 벗어난 문자열에 대한 포인터를 저장하고 있습니까?

getString()에 대한 자세한 정보 또는 코드를 통해 누군가가 확실한 답을 줄 수 있습니다.

+0

Dang. 같은 대답으로 1 분도 안되게 나를 이길 수 있습니다. 어쨌든, 저는 저와 같은 대답을 가진 사람은 분명한 천재입니다. 그래서 +1을 당신에게주는 개인적인 규칙이 있습니다. :-) –

1

글쎄, getString()이 구현 된 방법이나 다른 코드가 무엇인지 알지 못해서 뭐든지 될 수 있습니다. 그것은 포인터의 C (over) 사용 문제의 일부입니다.

내 생각에 처음으로 getString()은 내부 (static) 문자열에 대한 포인터를 반환하므로 각 호출은 마지막에서 검색된 값을 제거합니다.

실제로 C++을 사용하는 경우이 코드를 버리고 대신 std :: string을 사용하는 것이 좋습니다. 당신의 문제가 마술처럼 사라질 것 같아요.

0

을 제외하고, 다른 하나는 여기에 게시 무슨에서 그들이 갑자기 뭐가 잘못 알아 시간의 미래 및 디버그에 포함 할 수 있습니다 많은 librarys에 #defined이기 때문에 당신이 class, CLASS_IDCLASS_NAME 같은 이름을 피해야도있다.

관련 문제