[英]Null pointer assignment error
這是一個用於鏈接列表的簡單C程序,它顯示了一些運行時錯誤! “空指針分配”
從未聽說過,代碼中沒有看到任何錯誤?
我該怎么辦?
#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;
在嘗試打印列表之前,否則您將從頭開始,因此不會獲得任何輸出。
http://www.faqs.org/qa/qa-3786.html
空指針分配
NULL指針分配是運行時錯誤,由於各種原因而發生,原因之一是您的程序試圖訪問非法的內存位置。 非法位置意味着該位置在操作系統地址空間中或在其他進程的內存空間中。 在stdio.h中,NULL定義為0,所以每當您的程序嘗試訪問第0個位置時,操作系統都會由於運行時分配錯誤而殺死您的程序,因為第0個位置位於操作系統地址空間中,並且操作系統不允許通過以下方式訪問其地址空間:用戶程序
示例代碼:
int* ptr = NULL;
*ptr = 8;
說明:
在幾乎每個系統上,地址0都是保留的。 系統不允許您寫入該位置。 如果嘗試,將獲得運行時異常
您的代碼有些變化!
#include<stdlib.h>
庫。 scanf("%d",P->data);
到scanf("%d",&P->data);
printf("%d",P=P->data);
到printf("%d",P->data);
P=head
復位頭! 這是演示 。
程序中存在三個錯誤:
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.