malloc()导致Xcode中出现EXC_BAD_ACCESS错误

时间:2012-11-08 10:11:53

标签: c xcode malloc

我正在尝试为我的大学课程实现链接列表数据结构,但在执行代码时,以下行会产生EXC_BAD_ACCESS(代码= 1,地址= 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);
}

任何帮助将不胜感激。 谢谢大家!

1 个答案:

答案 0 :(得分:2)

for函数create()内的temp循环的第一次迭代是NULL,然后取消引用导致失败(不是malloc()导致失败失败)。您需要稍微重新构建代码以防止取消引用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. */
    }