【发布时间】:2016-05-24 13:34:55
【问题描述】:
我刚刚用一个巨大的内存请求测试了malloc,但它没有返回NULL。我已经听说过,但是 BSD(我在 Mac 上)man-page 说:
返回值
如果成功,calloc()、malloc()、realloc()、reallocf()和valloc()函数将返回指向已分配内存的指针。如果 有一个错误,他们返回一个NULL指针并将errno设置为ENOMEM。
如何正确可靠地检查返回的指针是否指向请求大小的有效块?
编辑:我刚刚看到this 的帖子。我猜 BSD 也一样?
编辑 2: 代码:
typedef struct {
uint8_t red;
uint8_t green;
uint8_t blue;
} RGB_TYPE;
int main() {
RGB_TYPE *field = malloc(50000 * 50000 * sizeof(RGB_TYPE));
if (!field)
return -1;
... write to field (SEG_FAULT) ...
return 0;
}
【问题讨论】:
-
请定义巨大,巨大不是一个精确的数量。
-
你的意思是你不信任这个人?
-
您向
malloc请求多少内存?贴出实际代码。系统可能会满足您对超出物理可用内存的请求,因为它可以使用交换文件来实现虚拟内存。 -
Huge 太模糊了。你需要多少内存?您的平台规格?
-
还有,你用它做什么?只是
int main(void) {void *pointer = malloc(CONSTANT_VALUE); if (pointer == NULL) printf("Cannot allocate 'Huge' bytes, sorry\n"); return 0;}?贴出代码。
标签: c memory malloc out-of-memory