gpt4 book ai didi

CreateThread() 奇怪地传递结构参数

转载 作者:可可西里 更新时间:2023-11-01 10:58:04 27 4
gpt4 key购买 nike

我将 struct 传递给 CreateThread() 函数。另一台机器上的相同代码工作正常。但是在我的机器上,“SendItem”总是变成 0xccccccc Bad Ptr>。有谁知道为什么?

....
myStruct mystruct;
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)SendItem,(LPVOID)&mystruct, 0, &thread);
...

DWORD WINAPI SendItem(LPVOID lpParam)
{
myStruct* SendItem= (myStruct*) lpParam;
...
}

struct myStruct
{
char Name [256];
int ID;
};

最佳答案

....
myStruct mystruct;
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)SendItem,(LPVOID)&mystruct, 0, &thread);
...

您没有显示实际代码,但这大概在某处的函数中。

您正在将一个局部变量 的地址传递给您的线程函数。问题是,一旦包含函数返回,局部变量就会被销毁。

解决方法是在堆上分配对象:

void start_thread(void)
{
myStruct *mystruct = malloc(sizeof(*mystruct));
if (!mystruct)
return;

CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)SendItem, (LPVOID)mystruct, 0, &thread);
}

关于CreateThread() 奇怪地传递结构参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33884661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com