我在我的 VC++ 程序中有一个要点,我必须创建一个新线程并作为 lpParam 传递一个 int 和一个字符串。所以到目前为止我所做的是(擦除指针/错误检查):
typedef struct _chThParam {
int c;
char *s;
} chThParam;
DWORD WINAPI startSession(LPVOID lpParam){
chThParam *param = (chThParam *)lpParam;
//do something with param
free(param->ip);
free(param);
return 0;
}
void handleResp(int c, char *s){
chThParam *param;
param = (chThParam *)malloc(sizeof(chThParam));
param->c = c;
param->s = (char *)malloc(strlen(s));
strcpy(param->s, s);
::chTh = CreateThread(NULL, 0, startSession, param, 0, chThId);
}
冲突在于free(param->ip);
消息:
Debug Error!
HEAP CORRUPTION DETECTED: after Normal block (#200) at 0x005BB908.
CRT detected that the application wrote to memory after end of heap buffer.
free(param);
没有问题。
我有一条规则:调用 malloc 意味着调用 free。这里有两个 malloc,然后是两个 free。但是我收到了这个消息。
所以问题是为什么我不能释放那个字符串!提前致谢。