【发布时间】:2011-01-04 09:59:17
【问题描述】:
在 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);
}
【问题讨论】:
-
请发布一些代码。指针本身必须占用固定数量的内存来存储,无论它们指向什么。
-
你所说的“最好”是什么意思?
-
基本上有两种方式:1)使用增长数组,2)使用链表。什么对您最有效(或正确)取决于您的需要。