2013-01-10 59 views
0

我被困在C堆棧中,如果有人能幫助我,我將不勝感激。這是我的代碼:堆疊一遍又一遍地環回

typedef struct stackEl stackEl; 
typedef struct Task Task; 
struct stackEl{ 
    struct Task *zad; 
    struct stackEl *last; 
}; 

struct Task{ 
    int x; 
    int y; 
}; 

void add(stackEl *main, Task *adding) 
{ 
    stackEl tmp; 
    tmp.last= main; 
    tmp.zad = adding; 
    *main=tmp; 
} 

這一個通過指向的,而不是添加到堆疊單個元件由一個彼此一個創建元素的無限數量。我不知道如何修復它。我試圖做這樣的:

void add(stackEl *main, Task *adding) 
{ 
    stackEl *tmp; 
    tmp = (stackEl*)malloc(sizeof(stackEl)); 
    tmp->last= main; 
    tmp->zad = adding; 
    main=tmp; 
} 

使用堆棧的頂部添加了這個方法元素,但它不會在主函數修改堆棧。

回答

1

第二個版本更接近事實。你需要像你一樣爲每個添加到堆棧的元素分配內存。還要注意,在第二個版本中,您只修改指針的本地副本,而不是實際更改此指針。您應該將指針傳遞給指針(即StackE1**),然後執行*main = tmp

+0

感謝您的幫助我已經想通了! – Norrec

相關問題