2016-02-19 45 views
-4

我想在C創建從輸入鏈接的列表如下:防止內存重用在退出範圍在C

int s; 
scanf("%d", &s); 
struct Node n = {0, NULL}; 
struct Node *prev = &n; 
for (int i = 0; i < s; ++i) 
{ 
    struct Node cur = {0, NULL}; 
    scanf((i<s-1)?"%d,":"%d", &cur.data); 

    //printf("%d\n", &cur); 

    prev->next = &cur; 
    prev = &cur; 
} 
n = *(n.next); 

但是,它似乎是小人的記憶被重新使用時,循環收益到下一次迭代。結果,該列表包含一個自我指涉節點。

有沒有辦法來防止再使用這樣的記憶?

我知道我可以使用malloc和循環之前分配所有的內存,但是這需要有多少元素在鏈表知識,我希望能消除對大小初始請求。

+0

請閱讀'malloc',堆等 –

+0

http://stackoverflow.com/questions/7314581/simple-linked-list-c可能是一個啓動器 –

+0

>我知道我可以使用malloc,並分配所有的在循環<'malloc'之前的內存專門用於在初始內存量未知時分配內存。你可以在循環體內調用它 – myaut

回答

3

獨立地控制其用C範圍的變量的壽命的唯一方法是在礦井動態存儲分配它。您無法阻止重複使用自動變量。

在你的情況下,它意味着簡單地使用

struct Node *curv=malloc(sizeof(struct Node)); 
scanf((i<s-1)?"%d,":"%d", &cur->data); 
prev->next = cur; 
prev = cur; 

這種方法的好處是,你做的不需要知道你要多少元素需要。您一次分配一個,當​​您需要停止時停止。當然,這種靈活性的代價是分配一個額外的指針元素。