2013-12-12 153 views
1

好了,我有以下結構混淆的malloc結構的陣列

struct node { 
    int visited; 
    struct node **depend; 
}; 

,我試圖使用動態以下

fscanf(iStream, "%d %d", &nTasks, &nRules); 

    graph = (struct node *) malloc(nTasks * sizeof(struct node)); 

分配,但Eclipse中顯示了一個

.. \ GraphSort.c:62:18:警告:函數的隱式聲明 'malloc'[-Wimplicit-function-declaration]圖=(struct node *) malloc(nTasks * sizeof(struct node)); ^

.. \ GraphSort.c:圖表=(結構節點[默認啓用]的 內置函數 '的malloc' 不相容隱式聲明:62:26:警告*)malloc(nTasks * sizeof(struct node)); ^

我不明白的是爲什麼。不是一個數組表示爲指向第一個元素的指針嗎?

還遠一點我有這樣的聲明,這表明沒有任何警告

fscanf(iStream, "%d, %d", &taskId, &dependencies); 
     graph[taskId-1].visited = 0; 
     graph[taskId-1].depend = (struct node **) malloc(dependencies * sizeof(struct node *)); 
+0

相關:http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc – anatolyg

+2

你有包括'stdlib.h'嗎? – theBeacon

+0

這就是爲什麼你應該[永遠不會在malloc中輸入malloc的結果](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc)... –

回答

5

implicit declaration of function 'malloc'是您還沒有正確的頭文件,它告訴你的程序如何調用malloc的指標。嘗試添加到您的程序的開始:

#include <stdlib.h> 

您的其他位代碼不是「聲明」,它只是一系列的語句。編譯器只會提醒你一次,因爲沒有爲編譯的每個文件聲明malloc()

+0

謝謝......現在我只是覺得很傻 –

2

看來,你只是忘了包括<stdlib.h>