2012-11-29 70 views
1
1 #include<stdio.h> 
    2 #include<malloc.h> 
    3 
    4 typedef struct node_t{ 
    5  int i; 
    6  struct node_t* link; 
    7 }node; 
    8 
    9 node* head = (node *)malloc(sizeof(node)); 
10 
11 if(head == NULL){ 
12  printf("\n malloc for head node failed! \n"); 
13 } 
14 
15 int main(){ 
16  int i = 10; 
17  node* temp = NULL; 
18  temp = (node *)malloc(sizeof(node)); 
19  if(temp == NULL){ 
20   printf("\n malloc for temp node failed! \n"); 
21  } 
22  else{ 
23   while(i<=10){ 
24    ; 
25   } 
26  } 
27  return 0; 
28 } 

編譯錯誤:初始元素不是常數

linked.c:9:1: error: initializer element is not constant 
linked.c:11:1: error: expected identifier or ‘(’ before ‘if’ 

我想一個simplelinked列表PGM。它沒有完全完成。我收到一個編譯錯誤。不知道爲什麼發生這種情況。

回答

3

正弦波,它的初始化需要一個恆定的 - 基本上,編譯器/連接器應該能夠爲其分配空間在可執行文件中,將初始化程序寫入空間,然後完成。如上面在初始化期間所做的那樣,沒有提供撥打malloc的條款 - 您需要在main(或您從main調用的某個內容)中執行此操作。

#include <stdlib.h> 

void init() { 
    head = malloc(sizeof(node)); 
} 

int main() { 
    init(); 
    // ... 
} 

在這種情況下,你在main有代碼永遠不會實際使用head的,所以你可以跳過上述所有沒有問題。

2

head是一個全局varibale。全局和靜態變量必須由常量表達式(即文字)初始化。所以你不能做

node* head = (node *)malloc(sizeof(node)); 
6
9 node* head = (node *)malloc(sizeof(node)); 
10 
11 if(head == NULL){ 
12  printf("\n malloc for head node failed! \n"); 
13 } 

這些線是不可能的main()之外,因爲任何函數調用或可執行文件應該是main()功能或主要調用的任何函數內。

對於linked.c:9:1: error: initializer element is not constant

只有函數定義或全局初始化是可能的外main()但初始化必須constant expression`。

你可以聲明head爲全局的,但初始化是錯誤的。

做這樣的:

node * head =NULL // here initialization using constant expression 


void function() // any function 
{ 
head = malloc(sizeof(node)); 
} 

對於linked.c:11:1: error: expected identifier

if語句不能是任何功能之外。 在你的情況下,將這些行內的主要問題和解決您定義head作爲全球

0

您不能在全局範圍內使用malloc()。 或 你可以做喜歡跟着

#include<stdio.h> 
#include<malloc.h> 
    : 
node* head 
    : 
    : 
int main(){ 
    : 
    : 
head = (node *)malloc(sizeof(node)); 
    : 
    : 
} 
+1

最好是包括'',而'' Omkant