我正在尝试释放用于创建堆栈的数组;但是,我不断收到无效指针错误。我有一个长整型数组来表示堆栈,并在 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/