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);」次のメッセージが表示されます。

"panic: Assertion "(char *) NextSlot(prev) <= p" failed, file "/usr/src/lib/libc/ansi/malloc.c", line 252

syslib:panic.c: スタックトレース: 0x468b 0x53b4 0x975a 0x2a33 0x2582 0x100a"

なぜこれが起こっているのか誰にも分かりますか?

ありがとうございました

4

2 に答える 2

0

arg1 に「サイズ」のサイズを割り当て、arg2 に「配列」のサイズを割り当てたので、これらの構造体メンバーのデータ型に対応する必要があると思います。したがって、void * arg1;

する必要があります:

unsigned long * arg1;

同様に、arg2 と arg3 を変更します。

于 2013-09-26T03:09:53.560 に答える
0

free(myCookie.arg1) は、構造体全体に割り当てられたメモリをクリーニングしています。

全体を解放する必要があると思います:

free(myCookie);
于 2012-10-21T09:45:36.000 に答える