簡體   English   中英

空指針分配錯誤

[英]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都是保留的。 系統不允許您寫入該位置。 如果嘗試,將獲得運行時異常

您的代碼有些變化!

  • 為malloc包含#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM