0

我有一个 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));

到目前为止一切顺利,我现在可以从我的结构中访问数组和大小,没问题。当我尝试释放已分配的内存时会出现问题:

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(prev)<= p”失败,文件“/usr/src/lib/libc/ansi/malloc.c”,第252行

syslib:panic.c: 堆栈跟踪: 0x468b 0x53b4 0x975a 0x2a33 0x2582 0x100a"

有谁知道为什么会这样?

谢谢

4

2 回答 2

0

free(myCookie.arg1) 正在清理分配给整个结构的内存。

我认为你应该释放整个东西:

free(myCookie);
于 2012-10-21T09:45:36.000 回答
0

我认为,既然您已分配 arg1 的大小为“size”,而 arg2 分配的大小为“array”,那应该与这些结构成员的数据类型相对应。所以, void * arg1;

应该 :

无符号长 * arg1;

同样,修改 arg2 和 arg3。

于 2013-09-26T03:09:53.560 回答