所以我做一个小项目,其中包括使用malloc,realloc并calloc职能不时.我明白在每次分配后我应该检查它是否失败并且它指向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.
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |