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