|
아무래도 구조체에서 꼬여서 그런 것이 아닌가 하는 생각을 해 봅니다. 지난번에 올려 주셨던 소스코드만 가지고는 추론하는데 한계가 있습니다. 올려 주셨던 소스에서 각 변수들이 어떤 타입인지, 메모리는 얼마나 할당하였는지 전혀 알 수 있는 부분이 없습니다. 질문을 올리실 때는 이러한 부분을 신경 써서 올려 주세요. 답장하는 입장에서는 이게 몰까 이런 생각으로 추론하는 것에도 한계가 있으닌까요.
지난번에 올려 주신 소스코드
//---------------------------------------------------------------------------
strTmp = "0x01, 0x02, 0x03, 0x00, 0x04, 0x05";
while ( exist_0x )
{
iPos = NULL;
iPos = strstr (strTmp.c_str (), "0x");
if ( iPos )
{
Qdata[count].IMG [i] = NULL;
result = iPos - strTmp.c_str() + 1;
image[i] = StrToInt (strTmp.SubString (result, 4));
//if(image[i]==0)
//ShowMessage(image[i]);
strTmp = iPos+6;
i=i+1;
}
else
{
exist_0x = FALSE;
}
}
memcpy((char *)Qdata[count].IMG, image, i);
exist_0x = TRUE;
image[0]=0;
//---------------------------------------------------------------------------
가상 추론
strTmp : String type
iPos : char* type
exist_0x : bool type
i : int type
image : int* (또는 int []) type
result : char* type
Qdata : 알 수 없음
Qdata.IMG : 알 수 없음 (pointer 형인 것 같음)
여기에서 관건이 되는 Qdata에 대한 내용이 전혀 없습니다. 이 부분에 대한 내용을 올려 주세요. (솔직히 말씀드리면, 이렇게 질문 올리시면 답변 드리기 싫습니다. 다만 저도 문제에 부딪혀 보았고, 그걸 해결하기 위해 너무 힘든 과정을 거쳐 와서, 조금이나마 도움이 되었으면 하는 입장에서 답변 드리고 있지만요...
자신의 현재 상황을 모두 보여 주시면 답변하는 입장에서도 보다 쉽게 답변 드릴 수 있는데..., 이런 쓸데없는 질문들이 오가지않고....
그런 생각도 듭니다. 질문하는 방법을 몰라서 그렇다...)
그리고, 참고 삼아 말씀드리면,
[참고1]
memcpy (dest, src, size);
memcpy는 메모리 복사로써 메모리를 생성하는 것은 아닙니다. 무슨 소리인고 하면, 복사목적지가 되는 dest의 메모리가 memcpy를 하기 전에 반드시 해당 size 이상 생성되어 있어야 한다는 것입니다. (중요!! 잘 이해해 보세요.)
[참고2]
strTmp은 String(혹은 AnsiString)이라는 Class입니다.
strTmp.c_str () 이것을 할 때마다 같은 주소 위치를 주리라고 예상하겠지만 그렇게 되지 않습니다. 어떤 주소위치를 줄지는 아무도 모릅니다.
김경완 님이 쓰신 글 :
: 저도 제 능력으로 해보고 싶지만 잘 되지 않는군요..
:
: 그리고 memcpy(buffer1, buffer2, sizeof(int)*count)
:
: 위 처럼해도 결과는 똑같습니다.
: 0x00 이후로는 버퍼에 들어가지 않는군요.
:
: 관심 가져주셔서 감사합니다.
|