VC++ プログラムで、新しいスレッドを作成し、lpParam として int と string を渡す必要があるポイントがあります。これまでに行ったことは次のとおりです(ポインター/エラーチェックの消去):
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 の呼び出しを意味します。ここでは 2 つの malloc、次に 2 つの free です。しかし、私はこのメッセージを受け取ります。
問題は、なぜその文字列を解放できないのかということです! 前もって感謝します。