C 堆栈的自由数组指针

标签 c

我正在尝试释放用于创建堆栈的数组;但是,我不断收到无效指针错误。我有一个长整型数组来表示堆栈,并在 array[-1] 处有一个附加元素来表示我拥有的堆栈数量。 STACK_NUM = 1

int numElements; 

void delete_Stack (long ** spp) {
    int index;
    for(index = -1; index < numElements; ++index){
        free((void *) spp[index]);
    }
    free(spp);
    spp = NULL;
}

long * new_Stack (unsigned long size) {
    void * memory = malloc((size + STACK_NUM) * sizeof(long));
    long * this_stack = (long *) memory + STACK_NUM;
    return this_stack;
}

int main(int argc, char * const * argv){
   long * stack;
   stack = new_Stack(5);
   numElements = 5;
   delete_Stack(&stack);
}

最佳答案

当你说stack = new_Stack(5);时,你正在调用malloc一次。并将结果存储在stack中。

当您调用delete_Stack(&stack);时,您会在stack[i]上调用free 5次,然后在stack上调用另一次free。

这不是必需的。对于这个new_stack,您只需要调用一次 free 即可。该函数将与给定的 new_stack

一起正常工作
void delete_Stack (long ** spp) {
  free((*spp)-STACK_NUM);
  *spp = NULL;
}

关于C 堆栈的自由数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34847051/

相关文章:

objective-c - C编程格式调整

c - 为什么 C 程序(.exe)停止工作?

c - OpenCL:从 'int *' 到 '__generic int *__generic *' 的转换

c - char数组指向c中整数的指针

c - 相同代码的程序在不同平台下运行结果不同

android - "-fpermissive"和 "include "在 linux c 编译器中不起作用

c - 没有 OpenCV 的开源 PSNR/SSIM C 实现?

c - fopen() 在 SD 卡上写入时返回无效参数?

c - 无法隐藏和显示小部件以响应事件

C 数学方程只正确分配一个变量一次