考慮下面的代碼:我們必須malloc一個結構嗎?
struct Node {
void* data;
int ref;
struct Node* next;
};
typedef struct Node* NodePtr;
我發現我越來越段錯誤,每當我嘗試做NODEPTR的田地什麼。例如: -
NodePtr node;
node->ref = 1;
所以我分配給NODEPTR一些空間,現在它似乎很好地工作。爲什麼是這樣?我的猜測是,由於節點只是一個指針,它的字段沒有內存。
於是,我就初始化NODEPTR:
NodePtr node = {
node->data = 0;
node->next = NULL;
node->ref = 0;
};
和好了,我得到這個錯誤:
error: expected â}â before â;â token
這歸結爲四個問題:
- 如果我的猜測是不正確的,如果我不使用malloc(),爲什麼它不工作?
- 爲什麼我的初始化不起作用?
- 將初始化一個結構體提供棧上的內存並解決我的問題?
- 如果沒有,我有替代方案必須爲我使用的每個結構分配內存嗎?
你不需要'malloc'。例如,'struct Node n = {NULL,42,NULL};'。你只是在各地都有語法錯誤。 – juanchopanza 2014-10-05 20:05:45
如果您正在創建非指針對象,則不需要分配內存。 – Ares 2014-10-05 20:05:59
您的'NodePtr'初始化甚至不是正確的C語法,這不可能是您嘗試的代碼。 – 2014-10-05 20:06:11