检查请求的内存两次

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() 成功才能到达那里。