c - 在 C 中实现动态调整堆栈大小的最佳方法是什么?

标签 c dynamic stack

在 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/

相关文章:

c - C 中 (float *) 和 *(float*) 的区别

javascript - jQuery animate() 重复 3 次

结构体的C动态 vector

java - TreeSet搜索花费很长时间,谜题: to find lucky numbers

c++ - C++ 如何返回栈底元素?

c - 指针和堆栈实现的问题

c - 在 switch 的情况下使用定义的字符

c - 使用 "syscall"而不是直接调用函数的原因是什么?

c - 段错误(核心转储)调用 mknode 函数时出错

c - 获取单个字符并将其传递给 C 中的函数