我有以下结构:
typedef struct {
char* type;
char* address;
int area, price;
}Offer;
和这两个功能:
Offer* initOffer(char* type, char* address, int area, int price)
{
Offer* p;
p = (Offer*)malloc(sizeof(Offer));
p->type = (char*)malloc(sizeof(type));
p->address = (char*)malloc(sizeof(address));
strcpy(p->type, type);
strcpy(p->address, address);
p->area = area;
p->price = price;
return p;
}
void destroyOffer(Offer* offer)
{
free(offer->type);
free(offer->address);
free(offer);
}
当我调用destroyOffer时出现问题,我不知道为什么,但是当我运行代码时,我有一个错误说:HEAP CORRUPTION DETECTED。如果我删除这两行,它工作正常,但我认为内存未正确清理:
free(offer->type);
free(offer->address);
答案 0 :(得分:0)
问题:
p->type = (char*)malloc(sizeof(type)); // That's just the size of a pointer
p->address = (char*)malloc(sizeof(address)); // Same problem.
之后,行:
strcpy(p->type, type);
strcpy(p->address, address);
最终写出他们不应该写的内存。这导致了未定义的行为。
你需要:
p->type = malloc(strlen(type)+1);
p->address = malloc(strlen(address)+1);
请参阅Do I cast the result of malloc?
如果编译器支持strdup
,也可以使用p->type = strdup(type);
p->address = strdup(address);
。如果是这样,您的代码可以简化为:
mfcol