为结构(堆栈)分配内存

时间:2013-11-24 02:07:54

标签: c

所以我试图实现某种形式的堆栈。这是我头文件中的定义:

struct tStack
{
    int data;
    struct tStack *dptr;
};

然后我有一个函数来对其他文件中的堆栈进行理论化,而不是它所谓的:

int stack_init(struct tStack *top)
{
    top = (struct tStack*)malloc(sizeof(struct tStack));
    if (top == NULL)
    {
        return E_INTERN;
    }
    top->data = '#';
    top->dptr = NULL;
    return 0;
}

我在主文件中调用init函数,如下所示:

struct tStack *top = NULL;
int err = 0;

err = stack_init(top);

问题是堆栈不会被初始化,而指向top的指针仍然是null。 我认为问题在于传递指针,因为我对指针不好:D

1 个答案:

答案 0 :(得分:0)

你的stack_init函数创建了一个指针的副本 - stack_init函数的本地指针,一旦stack_init完成就会停止存在。在stack_init函数的主体中,Top实际上不会为null。

你可以这样做:

struct tStack {
    int data;
    struct tStack *dptr;
};

int stack_init(struct tStack **top) {
    *top = (struct tStack*)malloc(sizeof(struct tStack));
    if (top == NULL)
    {
        return ERR;
    }
    (*top)->data = '#';
    (*top)->dptr = NULL;
    return 0;
}

int main() {
    struct tStack *top = NULL;
    int err = 0;
    err = stack_init(&top);
}