c - C中的堆栈实现

标签 c stack

typedef struct pilha Pilha;

struct pilha
{
    char metodo[31];
    Pilha *next;
};

void create_empty_stack(Pilha *Stack)
{
    Stack->next = NULL;
}

int main()
{
    Pilha *Stack;

    create_empty_stack(Stack);
}

给我一​​个执行错误。

这个函数有什么问题?

最佳答案

这是初学者常犯的典型错误。

让我们看一下您的主要功能:

int main()
{
    Pilha* Stack; // This line is your problem!

    create_empty_stack(Stack);
}

如果您还记得指针,声明 Pilha* Stack; 使 Stack 成为内存指针。但是现在它没有指向任何东西,因为你没有为 Pilha 类型的对象保留内存!

你的程序崩溃是因为 create_empty_stack() 试图访问 next,这个对象的成员(记住这个对象仍然不存在)。

所以,你应该做的是:

int main()
{
   // Reserve space in memory for one Pilha object and 
   // make Stack point to this memory address.
    Pilha* Stack = (Pilha*) malloc(sizeof(Pilha)); 

    create_empty_stack(Stack);
}

或者更简单的方法:

int main()
{
    Pilha Stack; // Declare a new Pilha object

    // and pass the memory address of this new object to create_empty_stack()
    create_empty_stack(&Stack); 
}

关于c - C中的堆栈实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3673501/

相关文章:

c - 如何修复 'structuredfunctions not calling'

c - n 个大小的 C 数组的第 n 个索引是否包含它的大小?

java - 如何让我的 ADT 堆栈显示其内容

arrays - Delphi - TStack 容量困惑

c++ - 是否有用于 C 和/或 C++ 的数据库访问库,其接口(interface)与 Perl 的 DBI 类似?

c - 使用宽字符和 C 语言中的 search.h 库时出现的问题

performance - http.Handle wrapper pattern -> 堆栈会膨胀吗?

c - C语言中向链表栈添加节点

c - 尝试在 C 中释放字符数组的数组会导致双重释放或损坏

c - 是否可以覆盖返回指针并直接跳转到另一个已经在同一台计算机上运行的程序中的函数?