3

大学のコースにリンクリストデータ構造を実装しようとしていますが、コードを実行すると、次の行でEXC_BAD_ACCESS(code = 1、address = 0x8)エラーが発生します。

temp->next = (ptrtonode) malloc(sizeof(struct node));

以下はコード全体です。

#include <stdio.h>
#include <stdlib.h>
typedef struct node *ptrtonode;
typedef ptrtonode header;

struct node
{
    int data;
    ptrtonode next;
};

ptrtonode create(int n)
{
    int i;
    header temphead = NULL;
    ptrtonode temp = temphead;
    for(i=0;i<n;i++)
    {
        temp->next = (ptrtonode) malloc(sizeof(struct node));
        printf("Enter data for node %d: ", i+1);
        scanf("%d", &temp->next->data);
        temp = temp->next;
    }
    temp->next = NULL;
    return temphead;
}

int main(int argc, const char * argv[])
{
    header head;
    int n;
    printf("How many nodes do you wish to create?");
    scanf("%d", &n);
    head = create(n);
}

どんな助けでもいただければ幸いです。皆さんありがとう!

4

1 に答える 1

2

関数for内のループの最初の繰り返しでis 、その後逆参照されて失敗が発生します (失敗は発生しません)。ポインターの逆参照を防ぐために、コードを少し再構築する必要があります。create()tempNULLmalloc()NULL

その他のポイント:

  • の戻り値をキャストするmalloc()必要はありません。
  • scanf()の結果をチェックしてn、有効な整数が割り当てられていることを確認します (およびintが正であることを確認します)。

    /* scanf() returns the number of assignments made,
       which in this case should be 1. */
    if (1 == scanf("%d", &n) && n > 0)
    {
        /* 'n' assigned a sensible value. */
    }
    
于 2012-11-08T10:14:29.000 に答える