Arrays 释放内存的问题

Arrays 释放内存的问题,arrays,malloc,free,Arrays,Malloc,Free,我的结构是3个空*: 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(si

我的结构是3个空*:

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(mycokie.arg2);”时,我得到以下消息:

“panic:Assertion”(char*)NextSlot(prev)free(mycokie.arg1)正在清理分配给整个结构的内存

我想你应该把这一切都释放出来:

free(myCookie);

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

应该是:

无符号长*arg1


类似地,修改arg2和arg3

是伪码还是使用可变长度数组,在这种情况下,sizeof(数组)返回的是元素的数量,而不是字节的大小。我确实使用了sizeof(数组),但只要我知道sizeof(数组)将返回数组的比特数,而不是元素数……如果按相反顺序释放它们,会发生什么?即
免费(mycokie.arg3)第一,然后是免费的(mycokie.arg2)然后
免费(mycokie.arg1)。对我来说,这似乎毫无意义。我从来没有在mycokie上使用过malloc,所以没有理由释放它,或者是吗?顺便说一句,我可以免费mycokie.arg1没有问题。。。问题只是arg2…哦,实际上我错了。我认为你的问题在于你没有给尺寸定一个值。所以数组[size]的长度未知。我已经给了它一个值。对于arg1,一切都很好,我可以读取值,它是正确的…当我尝试释放arg2时,问题发生了。。。顺便说一句,我可以访问arg2,它的值是正确的……mycokie.arg2=malloc(sizeof(array)+1);可能的空终止符问题?对不起,现在我只是在拍摄空白;P