堆栈

时间:2016-01-18 03:53:49

标签: c

我试图释放用于创建堆栈的数组;但是,我一直收到无效的指针错误。我有一个long数组来表示堆栈,数组[-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);
}

1 个答案:

答案 0 :(得分:0)

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

当您致电delete_Stack(&stack);时,您在stack[i]上免费拨打电话5次,然后在stack拨打免费电话。

这不是必需的。对于这个new_stack,你只需要免费拨打一次。此函数将与给定的new_stack

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