【发布时间】:2018-12-28 21:06:40
【问题描述】:
我需要知道我在尝试为指向 int 的指针数组释放动态分配的内存时是否正确使用了 free()。
我的代码是从我的一本书中的代码 sn-p 修改而来的,它是请求三个城市的温度读数的程序的开始。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ctr, num, num2 = 0, ctr2 = 0;
int* temps[3];
for(ctr = 0; ctr < 3; ctr++)
{
puts("how many readings for the city?");
scanf(" %d", &num);
temps[ctr] = (int*)malloc(num * sizeof(int));
num2 += num;
while(ctr2 < num2)
{
puts(" what is reading? ");
scanf(" %d", &temps[ctr][ctr2]);
printf("echo: %d ", temps[ctr][ctr2]);
ctr2++;
}
}
for(ctr = 0; ctr < 3; ctr++)
{
free(temps[ctr]);
}
getchar();
getchar();
return (0);
}
我知道使用 malloc() 分配内存的指针可能具有通过循环和数组索引的组合分配和访问的值。因此,我使用二维数组的索引从用户输入中分配了值,并且需要知道我是否正确使用了 free。我知道这是非常草率的编码,我只是想正确理解 free 以防止任何潜在的内存泄漏。
【问题讨论】:
-
格式正确的代码不是一个可选的东西。
-
不管怎样,在这样的程序中,您将返回操作系统,操作系统将回收您使用的所有内存。
-
看起来不错,除了
malloc的返回值的无用转换 -
@RobertHarvey 我敢打赌你从来没有拥有过 Amiga :)
-
不。从没干过。 :)