未能释放malloc


我创建了一个指针数组,每个指针指向一个结构:
curr = (line_packet*)malloc(sizeof(line_packet)); //line packet is the struct
array = (line_packet*)malloc(sizeof(line_packet*) * counter_lines); //counter_lines the number of curr structs i created.

每次我在数组中放置curr时,我都会使用以下行:

array[i] = *curr;

然后在代码的末尾,我写下:

for (i = 0; i < counter_lines; i++)
{
free(&array[i]);
}
free(array);

但程序似乎无法释放内存。我该怎么办?谢谢!

有几个错误。

对于本声明中的初学者

array = (line_packet*)malloc(sizeof(line_packet*) * counter_lines);

您分配了一个line_packet*类型的指针数组,并将返回的指针解释为line_packet *而不是line_packet **类型的指针。

你至少需要像一样写作

array = (line_packet**)malloc(sizeof(line_packet*) * counter_lines);

只要指针CCD_ 4具有类型CCD_。

所以你可能不会写

array[i] = *curr;

因为表达式CCD_ 6不是指针。

因此,

free(&array[i]);

在for循环中

for (i = 0; i < counter_lines; i++)
{
free(&array[i]);
}
free(array);

没有道理。

你至少需要像一样写作

array[i] = malloc( sizeof( line_packet ) );
*array[i] = *curr;

在这种情况下,此循环

for (i = 0; i < counter_lines; i++)
{
free(array[i]);
}
free(array);

将是正确的,前提是数组的每个元素要么指向动态分配的内存,要么指向空指针。

或者,您可以分配一个类型为line_packet的对象数组,而不是指针数组。

array = malloc(sizeof(line_packet) * counter_lines);

在这种情况下,此语句

array[i] = *curr;

将是正确的。

然而,环路

for (i = 0; i < counter_lines; i++)
{
free(&array[i]);
}

应移除。

最新更新