【发布时间】:2015-01-06 01:25:11
【问题描述】:
是否应该在每个malloc() 之后检查一次是否成功? malloc() 是否有可能失败?然后会发生什么?
在学校我们被告知我们应该检查,即:
arr = (int) malloc(sizeof(int)*x*y);
if(arr==NULL){
printf("Error. Allocation was unsuccessful. \n");
return 1;
}
这方面的做法是什么?我可以这样做吗:
if(!(arr = (int) malloc(sizeof(int)*x*y))
<error>
【问题讨论】:
-
理论上是的。实际上,如果 malloc 失败,操作系统可能即将崩溃。 PS:你的第二个例子比第一个更难阅读,应该被代码审查拒绝。
-
arr = (int) malloc(...)错误,malloc返回一个指针。除此之外:是的,您应该检查它是否失败,因为它可能会失败。 Also, casting its return value is harmful. -
1.你不需要演员表。 2. 是的,检查 - 为什么不
-
@SteveWellens 我会说在理论上和实践中都是肯定的,尤其是在分配大缓冲区时。
-
@AlexD - 是的。但是如果你分配的缓冲区太大以至于 malloc 可能会失败,那么我会说重新设计是为了。
标签: c error-handling malloc runtime-error allocation