あとで調べるメモ
C の話。
先ず構造体のメモリ領域をmallocを使って確保する。
構造体メンバの文字列を指すポインタに、mallocを使って確保したメモリ領域を割り当てる。
んで、その文字列の領域をfreeすると実行時エラーが出る。
なんで?
add()は線形リストにノードを追加する関数。
LIST* add(LIST *p,char *s){ int n = strlen(s); while(p->next != NULL){ p= p->next; } if((p->next=newnode())!=NULL){ if((p->item=malloc(sizeof(char)*n))==NULL){ fprintf(stderr, "文字列のメモリを確保できませんでした"); exit(1); } strcpy(p->item, s); } return p; }
delnode()は線形リストに割り当てたメモリ領域を解放する関数(この状態だとエラーが出た)。
void delnode(LIST* p){ if(p!=NULL){ delnode(p->next); free(p->item); free(p); } }
それにしても中途半端な形でコード貼っちゃったな。
これじゃ学校行かなきゃ他の部分の検証が出来ないじゃん。
*追記
次の回の講義でタオパイパイ似の学生が解決してくれた!
Yくんに感謝だ。
ここに載せてない newnode() って関数で要素を初期化してないからどこまでも解放し続けちゃうみたい。