创建一个函数来检查malloc是否成功

Omr*_*riJ 6 c malloc

所以我做一个小项目,其中包括使用malloc,realloccalloc职能不时.我明白在每次分配后我应该检查它是否失败并且它指向null如下:

int* arr = malloc(size*sizeof(int));

if (!arr)
{
      printf("ERROR! Not enough memory!\n");
      exit(1); // to exit the program immedietly.
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以创建一个方法来为每种类型的指针执行此操作,如下所示:

void checkOutOfMemory(const void* p) //gets a pointer and exit program if points to null.
{
    if (!p)
    {
        printf("ERROR! Out of memory!\n");
        exit(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,它到目前为止工作,但我开始怀疑是否有任何我不知道的特殊情况.

dbu*_*ush 13

这是执行此类检查的好方法.它可以防止错误检查代码在许多地方被复制.但是perror,您应该使用其中包含malloc失败原因的文字说明.

您可以更进一步,执行分配并立即检查:

void *safe_malloc(size_t size)
{
    void *ptr = malloc(size);

    if (!ptr && (size > 0)) {
      perror("malloc failed!");
      exit(EXIT_FAILURE);
    }

    return ptr;
}
Run Code Online (Sandbox Code Playgroud)

由于malloc可以返回NULL成功,如果给定大小为0,你需要检查这一点.

然后,您可以为realloc和创建类似的功能calloc.

  • 为了便于阅读,我建议`exit(EXIT_FAILURE);`而不是`exit(1);` (4认同)
  • `malloc(0)== NULL`不是`malloc()`失败.推荐`if(!ptr && size> 0){` (2认同)