很简单的问题,我提出了以下方案:零大小的malloc
#include <stdlib.h>
int main(int argc, char ** argv)
{
void * ptr;
ptr = malloc(0);
free(ptr);
}
而且它不会在我的机器上出现段错误。它是stdlib malloc和free的可移植行为,还是我在寻找麻烦?
编辑:似乎不便携是由malloc返回的值。问题是关于malloc(0)+自由组合,而不是ptr的值。
请记住,如果这个不奏效,还有不得不有很多特殊情况码。人们总是会根据变量或表达式来分配大量字节,并且每次都必须检查零是很尴尬的。 – 2009-10-26 13:33:51
相关:http://stackoverflow.com/questions/2022335/whats-the-point-in-malloc0 – jldupont 2010-01-07 18:23:46
我知道:超级晚评论这个封闭的问题。但是`malloc(0)`有一些用法,没有提到。在那些返回非NULL值的实现中,尤其是在DEBUG构建中,它可能会分配比您要求的更多的值,并为您提供指向刚刚经过其内部头的指针。如果在一系列分配之前和之后得到这个值,这可以让你感觉到实际的内存使用情况。 – 2017-02-24 17:57:13