【发布时间】:2018-03-05 16:09:33
【问题描述】:
我正在尝试使用数组在 C 中实现堆栈。我想要一个整数数组,每次尝试推送一个 int 时,我都想分配一些新内存。但我对malloc() 的理解是,它返回一个指向它在某处分配的内存的指针,如果我有一个int 指针数组,那会很好,但我没有。这是我分配新内存的地方,我收到警告:
int stack[] = {1}; // stack is allocated like this
stack[lasti + 1] = malloc(sizeof(int)); // assignment makes integer from pointer without a cast
是否可以使用动态分配的非指针数组来实现堆栈?或者malloc() 是否适合使用指针数组?
编辑:我想我正在尝试将数组视为链表?似乎当我想使用 malloc 为数组分配空间时,它看起来像malloc(sizeof(int) * maxSize)。这将在某处产生大量内存。我不能做的是要求 malloc 在该块的末尾给我另一块内存,但我可以扩展该块。如果我使用链表实现堆栈,那么 malloc 将新空间放在哪里都没关系。我想我在脑子里混淆了一些东西。
那么下一个问题 - 如果使用数组实现堆栈,我是否必须指定堆栈的最大大小?
【问题讨论】:
-
像任何数据结构一样,整数数组只是一个没有语义的任意大小的内存块(它由您的程序定义,即您如何使用它)。
malloc()允许分配内存块。 -
使用
realloc... -
请说明
stack的声明方式。而且没有指针的动态内存分配有些矛盾。 -
你定义它的方式,
stack只有一个元素。stack[lasti + 1]无效。 -
不,你显然不懂数组。这与
malloc无关。
标签: c arrays pointers memory-management stack