【发布时间】:2014-10-22 14:40:45
【问题描述】:
我收到了您可能在标题中看到的错误,我不知道为什么。
代码:
#include <cstdlib>
#include <cstdio>
struct CData {
int* num;
char* adr;
char* ph;
void (*init)(CData* owner);
void (*del)(CData* owner);
char* (*getAdr)(CData* owner);
void (*setAdr)(CData* owner, char* adr);
};
void CData_init(CData* owner) {
owner->num = (int*)malloc(sizeof(int));
owner->adr = (char*)malloc(sizeof(char)*255);
owner->ph = (char*)malloc(sizeof(char)*255);
}
void CData_del(CData* owner) {
free(owner->num);
free(owner->adr);
free(owner->ph);
}
char* CData_getAdr(CData* owner) {
return owner->adr;
}
void CData_setAdr(CData* owner, char* adr) {
owner->adr = adr;
}
int main() {
CData* data = (CData*)malloc(sizeof(CData));
data->init = CData_init;
data->del = CData_del;
data->getAdr = CData_getAdr;
data->setAdr = CData_setAdr;
data->init(data);
data->setAdr(data, "asdasd");
printf("%d", data->getAdr(data));
data->del(data);
free(data);
return 0;
}
所以我认为错误是由 char* 操作引起的,但我不知道为什么。
我想要做的是我希望它能够将一个字符串作为参数传递给data->setAdr,然后我希望它被分配给变量。
编译行:
gcc -o test main.cpp
【问题讨论】:
-
"double free" - 这应该告诉你一些事情,也许是像 "double
free()" -
你不能释放字符串文字。 (而且您在
setAdr中泄露了之前的值。) -
是的,我一开始也是这么猜测的,但是在哪里呢?
-
那我该如何释放内存呢?我应该吗?
-
你为什么使用 C++ 编译器来编译 C 代码?
标签: c