メイン:malloc.c:2405:sysmalloc:アサーション `(old_top == initial_top(AV)& & old_sizeの== 0)|| (unsigned long)old_end & & prev_inuse(old_top)& &(unsigned long)old_end &(pagesize - 1))== 0) 'は失敗しました。Sysmalloc:アサーション
ユーザーが頭や尾にのみ追加できる二重リンクリストを作成しようとすると、私は結局上の美しい流産メッセージを得ることになります。
私はgdbを使ってこれをどのような機能に絞り込んでいますが、実際に何が間違っているのか分かりません。それは、最初のノードを割り当て、その後、それは私にエラーをスローします。次のように
機能は次のとおりです。
data* initD(){
data *D = NULL;
D = malloc(sizeof(data*));
if (!D){
printf("Error in allocation of data\n");
exit(0);
}
D->head = NULL;
D->tail = NULL;
D->next = NULL;
D->prev = NULL;
D->val = -1;
return D;
}
'malloc(sizeof(data *))'? 'sizeof(data)!= sizeof(data *)'の場合はどうなりますか? –
それはなぜでしょうか?メモリ内のいくつかの場所へのポインタです。データはヘッダーファイルで定義されている構造体なので、データのサイズがどのようになるかはわかりません。* – Ohunter
@Ohunterポインタのサイズが固定されています。しかし、あなたの構造のそれはポインタのサイズよりも大きいかもしれません。任意の型のポインタのサイズは同じです。 –