2017-10-23 10 views
2

リンクリストの最後に要素を追加する関数を作成します。また、要素が正常に追加された場合は0を返し、要素に対してメモリが割り当てられない場合は1を返します。メモリが割り当てられているかどうかを検出するには? (リンクリスト)

質問は、メモリが正常に割り当てられたかどうか、または要素が正常に追加されたかどうかを知る方法です。これはコードです:

int push_back(pos_t *head, int new_value) { 
    pos_t *temp = head; 

    while (temp->next != NULL) { 
     temp = temp->next; 
    } 
    pos_t *temp1 = (pos_t *)malloc(sizeof(pos_t)); 
    temp1->data = new_value; 
    temp1->next = NULL; 
    temp = temp1; 
} 
+0

'TEMP = TEMP1:ここ

は、対応するコードでありますか? – BLUEPIXY

+0

'head == NULL'は可能ですか?リンクリストがどのように初期化されているかを見ると便利です。 – chux

答えて

1

mallocが大き場合は、割り当てられたメモリ、または

  • へのポインタを返すようにいずれかに定義されているため、あなたは、次のコード

    if (temp1 == NULL) { return 1; } 
    

    を追加する必要がありますゼロの場合はNULLを返します。

  • エラーの場合はNULLを返します。

あなたがゼロのサイズを要求していないことを制御することができますので、あなたは正のサイズを使用し、mallocはNULLを返した場合、あなたはエラーが発生したと推論することができます。

多くのシステムには、「マニュアル」がインストールされています。 Linuxシステムを使用している場合は、コマンド "man malloc"がmallocのマニュアルページを表示します。 Windowsシステムで作業している場合、the manual for mallocのWeb検索で詳細を処理するのに十分な詳細が得られます。

+0

もちろん、あなたは 'return 0;'も追加する必要があります。そして、両方のコードの追加場所が分かります。 –

0

この関数には欠点があります。つまり、リスト内の最初のノードの割り当てには使用できません。つまり、リストが空の場合です。

プロトタイプではなく、その値のリストポインタのアドレスを渡す

int push_back(pos_t **headp, int new_value); 

に変更されなければなりません。

malloc()のテストは簡単です:jutsは返されたポインタをNULLまたは0と比較します。 ; - ; `>` temp->次= TEMP1 '

int push_back(pos_t **headp, int new_value) { 
    pos_t *temp = *headp; 
    pos_t *temp1 = malloc(sizeof(pos_t)); 
    if (temp1 == NULL) { // allocation failure 
     return 1; 
    } 
    temp1->data = new_value; 
    temp1->next = NULL; 

    if (temp == NULL) {  // empty list 
     *headp = temp1; 
    } else { 
     while (temp->next != NULL) { 
      temp = temp->next; 
     } 
     temp->next = temp1; // append node to the end of the list 
    } 
    return 0; 
} 
関連する問題