检查内存请求两次

时间:2016-04-25 18:29:51

标签: c malloc free

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

让我们先检查以下程序:

#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,然后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);

2 个答案:

答案 0 :(得分:2)

无需在程序中检查。如果前两个malloc()成功,你只能到达那里。

答案 1 :(得分:1)

您可以使用通过free()分配的内存的有效指针或零值来调用malloc()。因此,只要指针有效或为NULL,您就不必在调用free()之前进行检查。