检查请求的内存两次
Checking the memory requested two times
有一件事我不确定,所以现在提问,希望这里的标题没问题。
让我们先检查以下程序:
#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)] = '[=10=]';
printf("FN = %s\n",pers->fn);
if(pers->fn){
free(pers->fn);
}
if(pers){
free(pers);
}
}
输出将是:
No memory Avaible =>> [pers->fn]
因为没有可用内存,我在 pers
上做了一个 free,然后 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()
分配的内存的有效指针或零值来调用 free()
。因此,只要您的指针有效或为 NULL,您就不必在调用 free()
.
之前进行检查
不需要检查程序中的那个点。只有前两次 malloc()
成功才能到达那里。
有一件事我不确定,所以现在提问,希望这里的标题没问题。
让我们先检查以下程序:
#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)] = '[=10=]';
printf("FN = %s\n",pers->fn);
if(pers->fn){
free(pers->fn);
}
if(pers){
free(pers);
}
}
输出将是:
No memory Avaible =>> [pers->fn]
因为没有可用内存,我在 pers
上做了一个 free,然后 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()
分配的内存的有效指针或零值来调用 free()
。因此,只要您的指针有效或为 NULL,您就不必在调用 free()
.
不需要检查程序中的那个点。只有前两次 malloc()
成功才能到达那里。