私は、そのノード構造今私たちにいくつかの場所にポインタを運ぶノードの空きメモリを行う方法
struct node
{
char *p;
struct node *next;
}*start;
以下の通りである私たちは* char型pはmalloc関数call.Similarlyによって割り当てられたメモリ位置へのポインタであるリンクリストを持っています全体もmallocを使って割り当てられます。さて、
main()
{
struct node *tmp;
tmp=malloc(sizeof(struct node));
tmp->next=NULL;
tmp->p=malloc(2*sizeof(int));
free(tmp->p);
free(tmp);
}
以下のようなもの、それはここに必要な空きメモリか何かに正しい方法ですがmalloc関数呼び出しの両方が占有するスペースを解放したいと思いますか?
はいポイントtmp-> p-NULLについては問題ありませんが、tmp-> p = NULLステートメントではないかどうかを知りたいのですが、セグメント違反の可能性はありますか? –
いいえこの場合、抱擁ポインタを逆参照しないので、segfaultの可能性はありません。あなたのコードにぶら下がっているポインタが存在するだけでは、segfaultは発生しません。 Segfaultは正直な間違いのために手をつけたポインタを使用しようとするときに発生します。ノードを解放した後にポインタpを逆参照しようとすると、segfaultが発生することがあります。このようなものはsegfault - > free(tmp-> p)になります。 *(tmp-> p); // segfault。 – Ameliorator
この文を印刷しようとしました*(tmp-> p)まだセグメンテーションフォールト –