有一件事我不确定,因此现在的问题,我希望标题在这里没问题。
让我们先检查以下程序:
#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 Avaiblen");
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)] = ' ';
printf("FN = %sn",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);
无需在
程序中的这一点上进行检查。只有前两malloc()
成功,你才能到达那里。
您可以使用
通过 malloc()
分配的内存的有效指针或零值调用free()
。因此,只要指针有效或为 NULL,就不必在调用 free()
之前进行检查。