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]);
}
应移除。