我正在尝试为我的大学课程实现链接列表数据结构,但在执行代码时,以下行会产生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);
}
任何帮助将不胜感激。 谢谢大家!
答案 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. */
}