gpt4 book ai didi

c - 释放空指针数组,释放第一个元素后崩溃

转载 作者:行者123 更新时间:2023-11-30 16:47:14 26 4
gpt4 key购买 nike

我有一个简单的程序,它将一个 void* 数组包装到一个具有长度和自动调整大小的结构中。尽管在我释放第一个元素后它崩溃了。

Gif that illustrates my problem

#include "stdafx.h"
#include "array.h"
#include "error_handler.h"

#define RESIZE_STEP 3

Array * new_array(int initial_length, size_t size_of_element)
{
Array* temp_struct = NULL;
temp_struct = (Array*)malloc(sizeof(Array));
void** temp_array = NULL;
temp_array = (void**)malloc(initial_length * size_of_element);
if (!temp_array) {
if (print_message(MEMORY_ALLOCATION_ERROR) == BREAK)
{
deallocate_tab(temp_struct);
temp_array = NULL;
exit(1);
}
}

for (int i = 0; i < initial_length; i++) {
temp_array[i] = malloc(size_of_element);
if (!temp_array[i] && print_message(MEMORY_ALLOCATION_ERROR) == BREAK) {
deallocate_tab(temp_struct);
temp_array = NULL;
exit(1);
}
else {
temp_array[i] = NULL;
}
}

temp_struct->array = temp_array;
temp_struct->length = 0;
temp_struct->max_length = initial_length;

return temp_struct;

}

Array * deallocate_tab(Array * vector)
{
if (vector) {
void** tab = vector->array;
if (tab)
{
int M = _msize(tab) / sizeof(void *); //ilosc wierszy w macierzy str
for (int i = 0; i < M; ++i)
{
if (tab[i])
{
free(tab[i]);
tab[i] = NULL;
}
}

free(tab);
tab = NULL;
}
free(vector);
vector = NULL;
}
return vector;
}

释放循环的第一次迭代进行得很顺利,在调试器中我可以读取我的值,但是在释放数组中的第一个项目后,所有其他项目似乎都不存在,我可以查找它们。

为什么会发生这种情况?

最佳答案

在 c 中,无法仅通过查看数组来确定数组的大小。即这不起作用

int M = _msize(tab) / sizeof(void *);

您需要传递大小以及指向其基址的指针

关于c - 释放空指针数组,释放第一个元素后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43400631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com