2014-11-02 145 views
-1

這是一個簡單的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; 
} 

} 
+4

請縮進你的代碼,讓我們讀它。 – alk 2014-11-02 11:39:44

+0

Yaa現在工作!其實我第一次遇到它..所以有點困惑!非常感謝! – user3672971 2014-11-02 11:44:06

回答

3

這裏有許多錯誤:

  • 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;之前,試圖打印出你的清單,否則你開始在最後,所以你不會得到任何輸出。

+0

Thnks!最後一個真的有幫助!只得到一個單一的元素! – user3672971 2014-11-02 11:51:19

1

有程序三個錯誤:

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

3

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