我有一个3 void *的结构:
typedef struct ck{
void * arg1;
void * arg2;
void * arg3;
} argCookie;
稍后我会实现argCookie:
argCookie myCookie;
然后我为它的论点提供了一些值:
unsigned long size;
//give a value to size
unsigned short array[size];
//fill the array
myCookie.arg1=malloc(sizeof(size));
myCookie.arg2=malloc(sizeof(array));
memcpy(myCookie.arg1,&size,sizeof(size));
memcpy(myCookie.arg2,array,sizeof(array));
到目前为止这么好,我现在可以从我的struct获取数组和大小,没问题。当我尝试释放我分配的内存时会出现问题:
free(myCookie.arg1);
free(myCookie.arg2);//something goes bad when this line of code is executed don't know why
free(myCookie.arg3);
myCookie.arg1=NULL;
myCookie.arg2=NULL;
myCookie.arg3=NULL;
当行“free(myCookie.arg2);”执行后我收到以下消息:
“恐慌:断言”(char *)NextSlot(上一页)< = p“失败,文件”/usr/src/lib/libc/ansi/malloc.c“,第252行
syslib:panic.c:stacktrace:0x468b 0x53b4 0x975a 0x2a33 0x2582 0x100a“
有谁知道为什么会这样?
谢谢
答案 0 :(得分:0)
free(myCookie.arg1)正在清理分配给整个struct的内存。
我认为你应该释放整个事情:
free(myCookie);
答案 1 :(得分:0)
我认为,既然你已经为arg1分配了'size'的大小而arg2分配了'array'的大小,那么这应该对应于这些结构成员的数据类型。 所以, void * arg1;
应该是:
unsigned long * arg1;
同样,修改arg2和arg3。