空指针赋值错误
这是一个简单的C程序linklist,它显示一些运行时错误! “空指针分配”空指针赋值错误
从来没有听说过它,我没有看到代码中的任何错误?
我该怎么办?
#include <stdio.h>
#include<conio.h>
typedef struct node
{
int data;
struct node *next;
}node;
void main()
{
node *head,*P;
int n,i;
printf("Enter no. of elements\n");
scanf("%d",&n);
printf("Enter %d data elements\n",n);
head=(node*)malloc(sizeof(node));
scanf("%d",&(head->data));
head->next = NULL;
P=head;
for(i=1;i<n;i++)
{
P->next=(node*)malloc(sizeof(node));
P=P->next;
P->next=NULL;
scanf("%d",P->data);
}
while(P!=NULL)
{
printf("%d",P=P->data);
P=P->next;
}
}
这里有许多错误:
-
malloc
被称为无范围的原型。 (修复,#include <stdlib.h>
)。 - 的
malloc
返回值不检查 -
scanf("%d",P->data);
应该scanf("%d",&P->data);
-
printf("%d",P=P->data);
应该printf("%d",P->data);
你应该得到的最多的这些警告。不要忽略你的编译器输出消息。
任何这些都可能导致你的错误(尽管我猜P=P->data
是最有可能的)。
此外,重置P = head;
之前,试图打印出你的清单,否则你开始在最后,所以你不会得到任何输出。
Thnks!最后一个真的有帮助!只得到一个单一的元素! – user3672971 2014-11-02 11:51:19
有程序三个错误:
scanf("%d",P->data);
- >scanf("%d",&P->data);
printf("data %d \n", P=P->data);
- >printf("data %d \n", P->data);
而且当你正在运行while
循环指针P
因此指向最后一个节点崩溃正在发生。在while
循环之前做P=head
。
http://www.faqs.org/qa/qa-3786.html
NULL指针分配
NULL指针分配是一个运行时错误它的发生是由于各种 一个原因是,乌尔程序试图访问一个非法存储器 位置。非法位置意味着要么位于 操作系统地址空间中,要么在其他进程内存空间中存储 。在stdio中。h NULL被定义为0因此,无论何时您的程序 试图访问第0个位置,操作系统会因为运行时分配错误而导致程序 死机,因为第0个位置位于操作系统地址空间的 ,操作系统不允许 访问其地址空间由用户程序
示例代码:
int* ptr = NULL;
*ptr = 8;
说明:
几乎在每个系统上,地址0都是保留的。系统不会允许您写入该位置。如果你尝试,你会得到一个运行时异常
你的代码的一些变化!
- 包含
#include<stdlib.h>
库的malloc。 - 变化
scanf("%d",P->data);
到scanf("%d",&P->data);
- 并在打印前
printf("%d",P=P->data);
到printf("%d",P->data);
- 写
P=head
复位头!
这里是Demo。
请缩进你的代码,让我们读它。 – alk 2014-11-02 11:39:44
Yaa现在工作!其实我第一次遇到它..所以有点困惑!非常感谢! – user3672971 2014-11-02 11:44:06