我有像这样的结构体,解放出来潜在未初始化的结构成员
typedef struct Player {
char *name;
char *heroID;
char *heroName;
int slotNo;
} Player;
然后我将其定义为静态分配的阵列
Player players[10];
我的程序可能需要退出时,我还没有完全在players
中分配了Player
结构中的每个char*
字段的所有字段,并且我已经决定在退出之前释放任何已分配的内存,即使现代操作系统不要求您这样做,因为这样做是很好的编程实践。
但是,我不能只是循环通过players
和free(player[i].name)
等,因为它可能是未初始化的。
解决此问题的唯一方法是,在定义数组并然后释放内存后,手动将每个char指针初始化为NULL,然后检查指针是否为NULL,以决定是否应释放它?
如果是这样,当我通过使用大括号声明播放器数组时,什么是初始化,循环和手动赋值或定义值的最佳方式。还是有另一种方式?
'我决定在退出之前释放任何已分配的内存,即使现代操作系统不需要你,因为这样做是一种很好的编程习惯。“并非如此。我认为这是浪费时间和可读性。如果您正在编写库,则必须始终清理,因为用户可能决定处理该错误并继续。但是对于一个应用程序来说,只要退出内存错误就是一种理智的行为。 – orlp
我与他的回复:)爆米花:) http://blogs.msdn.com/b/oldnewthing/archive/2012/01/05/10253268.aspx - 说,你真的应该calloc()作为Jakub下面提到所以你永远不会有无效的垃圾指针 – iccir
@nightcracker我基于我对这些线程的决定,http://stackoverflow.com/questions/3126122/in-c-is-it-necessary-to-free-a-pointer-at - 出口,http://stackoverflow.com/questions/5405843/is-it-up-to-the-programmer-to-deallocate-on-exit,http://stackoverflow.com/questions/2213627/when-you -exit -ac-application-is-the-malloc-ed-memory-automatically-freed – Michael