2013-01-10 62 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

相关问题