在 C 中实现动态调整堆栈大小的最佳正确方法是什么?
例如,我想为一个堆栈分配一定数量的内存,但是当该堆栈变满时,分配的内存会加倍以容纳新数据等。
我当时使用一个简单的 void 指针数组实现了一个堆栈,这样我就可以存储所有类型的指针,因此它非常可重用。当我尝试使用 malloc()/realloc() 实现此功能时,由于没有分配大小的 void 指针,我在进行指针数学运算时遇到了错误。
在 C 中实现可动态调整大小的堆栈的最佳正确方法是什么?
编辑:
我正在尝试类似这段代码(删除了错误检查)但我现在明白我不能像这样与 void 指针交互。所以我只是在想如何合法地做这样的事情。这对我来说是一个很大的学习练习,因为我从未真正接触过 C。
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
static int index = 0;
void* CreateStack(void)
{
void *stack = malloc(INITIAL_STACK_SIZE);
return stack;
}
void* Pop(void *stack)
{
return stack + index--;
}
void Push(void *stack, void *value)
{
*(stack + index) = value;
}
void FreeStack(void *stack)
{
free(stack);
}
最佳答案
我认为问题在于您在通话中使用了错误的尺寸。您不需要指针对象的大小 - 您需要指针本身的大小。
关于c - 在 C 中实现动态调整堆栈大小的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2053088/