有一件事我不确定,因此现在的问题,我希望这里的标题可以。
让我们先检查以下程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person{
char *fn;
};
int main(void){
struct person *pers;
pers = malloc(sizeof(struct person));
if(pers == NULL){
printf("No memory Avaible\n");
exit(1);
}
pers->fn = malloc(10000000000000000); /*requesting a big chunk*/
if(pers->fn == NULL){
printf("No memory Avaible =>> [pers->fn]\n");
free(pers);
exit(2);
}
strcpy(pers->fn, "Michi");
pers->fn[strlen(pers->fn)] = '\0';
printf("FN = %s\n",pers->fn);
if(pers->fn){
free(pers->fn);
}
if(pers){
free(pers);
}
}
输出将是:
No memory Avaible =>> [pers->fn]
由于没有可用内存,我可以免费使用pers
,然后exit
:
if(pers->fn == NULL){
printf("No memory Avaible =>> [pers->fn]\n");
free(pers);
exit(2);
}
现在让我们说我们有足够的内存并且程序运行正常,后者我们来到这一部分:
if(pers->fn){
free(pers->fn);
}
if(pers){
free(pers);
}
是否有保证我应该检查内存是否仍然存在? 或者我很满意:
free(pers->fn);
free(pers);
答案 0 :(得分:2)
无需在程序中检查。如果前两个malloc()
成功,你只能到达那里。
答案 1 :(得分:1)
您可以使用通过free()
分配的内存的有效指针或零值来调用malloc()
。因此,只要指针有效或为NULL,您就不必在调用free()
之前进行检查。