我在这个项目中使用 C 来创建一堆动态创建的数组。它们是按照解释生成的[here][1]
。这很好用。' 但是,当我尝试使用下面的代码释放数组时,我收到“分段错误(Core Duped)”。我正在使用下面的清单创建一个“my_struct”。
typedef struct
{
uint32_t** block;
uint32_t** valid;
uint8_t block_size; //Bytes per block
uint8_t level;
}my_struct;
my_struct L1, L2;
此后,稍后,指针“block”和“valid”使用下面的函数分配动态内存,它们作为参数连续传递(arr_ptr):
void Generate2DArray (uint32_t** arr_ptr, uint32_t row, uint32_t column)
{
uint32_t* temp;
uint32_t i = 0;
uint32_t j = 0;
arr_ptr = (uint32_t**)malloc(row* sizeof(uint32_t*));
if(arr_ptr == NULL)
{
printf("MALLOC 1 FAILS \n ");
}
temp = (uint32_t*)malloc(row* column* sizeof(uint32_t));
if(temp == NULL)
{
printf("MALLOC 2 FAILS \n ");
}
for (i = 0; i < row; i++)
{
arr_ptr[i] = temp + (i * column);
}
}
到目前为止,这一切都很好。
现在,当我尝试在代码末尾附近“释放”内存时,使用下面的列表,我收到一条错误消息,提示“分段错误(核心转储)”
void FreeMemory(uint32_t** arr_ptr, uint32_t rows)
{
uint32_t i = 0;
for ( i = 0; i < rows; i++)
{
free(arr_ptr[i]);
}
free(arr_ptr);
}
请提供有关我哪里出错的任何建议。我也浏览了这篇文章,我的代码似乎符合它。
谢谢!!