gpt4 book ai didi

检查请求的内存两次

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:31 24 4
gpt4 key购买 nike

有一件事我不确定,因此现在是问题,我希望这里的标题没问题。

让我们先检查以下程序:

#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 上做了一个 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() 成功,您才能到达那里。

关于检查请求的内存两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36848381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com