在投射pParam之后,为什么我会得到随机字符?

时间:2010-02-16 23:52:15

标签: c windows mfc multithreading

这是我第一次使用线程,所以我现在还不完全理解它们。

我有两种结构:

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;

我想将MSG2两个结构“发送”到我的线程中,我这样做了:

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

2 个答案:

答案 0 :(得分:1)

这是因为CopyThread期望接收相关数据的测试*,但是您正在传递测试** - 指向相关数据的指针。然后将其转换为CopyThread中的test *,这会产生随机字符。

您应该将对CreateThread的调用更改为:

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); 

答案 1 :(得分:0)

我弄清楚我的问题是什么。当我宣布我的测试结构时,我在那里增加了一个*。

struct test 
{ 
  struct ddata* difference; 
  int diff; 
}; 
struct test *MSG2;  <-- here

如果我删除了开头,它运行正常:

struct test MSG2;

感谢您的帮助!

kampi