1

だから私はこのコードを持っています。スニペットを以下に示します。

list* init(list* list1)
{
  list1->head = NULL;
  list1->size = 0;
  return list1;
}

list1 はリンクされたリストであり、init は main 関数から呼び出されます。コードを実行すると、この特定の行list1->head= NULLが強調表示され、次のように表示されます

モジュール定義ファイルが指定されていません: デフォルトを使用します。

そして実行を停止しました。

Windows 7 でターボ C を使用しています。

何をすればよいでしょうか?完全なコードを投稿しましょうか..ちょっと大きいですが..

4

2 に答える 2

0

コメントでの私たちの議論に基づいて、それは要因の組み合わせのように見えます.

まず、Turbo C コンパイラは NULL が何であるかを認識していないようです。NULL は 0 の単なる typedef であるため、代わりに 0 を使用できます。

次に、リスト オブジェクトにメモリを割り当てていないようです。関数を呼び出す前に、次のことを試してください。

list* list1 = malloc(sizeof(list));

ただし、新しいlistオブジェクトを作成して初期化する場合は、関数を次のように書き直したほうがよいでしょう。

list* init(){
    list *new_list = malloc(sizeof(list));
    new_list->head = 0; // <-- this sets head to the equivalent of NULL
    new_list->size =0;
    return new_list;
}

既存のリストを再初期化する関数が必要な場合は、現在のコードでメモリ リークが発生しています。

于 2011-09-09T18:07:26.110 に答える
0

NULL は、C の場合は < stddef.h > で定義され、C++ の場合は同等の < cstddef > で定義されます。

于 2011-09-09T17:52:51.630 に答える