처음 쓰레드를 쓰고 싶습니다. 그래서 지금은 쓰레드를 완전히 이해하지 못합니다.pParam을 캐스팅 한 후 왜 임의의 문자를 다시 얻습니까?
내가 두 구조가 : 내 스레드에 MSG2이 구조를 "전송"할
struct ddata //difference content
{
char *filename;
char *size;
};
struct ddata *difference = (struct ddata *) malloc(dif * sizeof *difference);
struct test
{
struct ddata* difference;
int diff;
};
struct test *MSG2;
MSG2 = (struct test*)malloc(sizeof(test));
MSG2->difference = difference;
MSG2->diff = diff;
, 그리고 내가 그것을 이런 식으로했다 :
CreateThread(
NULL, // default security attributes
0, // use default stack size
CopyThread, // thread function name
&MSG2, // argument to thread function
0, // use default creation flags
NULL);
그리고 지금을, 여기에 내 온다 문제. 내 스레드에서, 나는 pParam 다시 캐스팅하고, 그것을 테스트하기 위해 일부 데이터를 인쇄하고 싶지만 임의의 문자가 나타납니다. 내 스레드 :
DWORD WINAPI CopyThread(LPVOID pParam)
{
char a[100];
test *Test = (test*)(pParam);
sprintf(a, "diff: %s", Test->difference->filename);
MessageBoxA(NULL,a,0,0);
}
내가 뭘 잘못하고 있니?
미리 감사드립니다.
kampi
그래, 또 다른 무효 피해자. 스레드가 시작될 때까지 범위를 벗어난 포인터는 다음 바이트가 될 수 있습니다. –
안녕하세요! MSG2 이전에 '&'를 제거하면 응용 프로그램이 정지됩니다. ( – kampi