C语言 检查请求的内存两次



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

让我们先检查以下程序:

#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() 之前进行检查。

相关内容

  • 没有找到相关文章

最新更新