在我的C程序中,我正试图使用malloc()函数分配一些内存,就像这样:
char *buf = (char *)malloc(size);
但问题在于malloc()总是返回非空指针。即使我试图分配巨大的内存(大小为1E + 13),它仍然会返回一个有效的buf指针。当然,在此之后,程序会崩溃。
但是,如果返回的buf值不为空,我如何检测请求的内存量过大而无法使用呢?
编辑:
在评论中,我看到我的问题可能不够清楚。因此,这是更详细的示例:
unsigned long size = very_large_calculated_value;
char *buf = (char *)malloc(size);
if (buf == NULL) i_know_it_fails;
...
但是Xcode运行这段代码时,无论请求的大小是多少,buf都不会为NULL。所以,程序很快就会崩溃。如果buf不为NULL但明显无法使用,我该如何检测内存分配失败?
编辑:
对于那些将问题标记为重复的人:
问题“如何检测内存分配失败?”没有答案,因为像“更改操作系统中的某些设置”这样的解决方案并不是一个答案——我正在寻求C代码来检测内存分配错误,或者像“无法通过编程实现”这样的东西。
malloc
等函数返回的void *
转换。C语言 不是 C++! - too honest for this sitevoid *
可以安全地分配给任何非函数指针或从其接收赋值,而不需要进行强制类型转换。 - dbush