返回首页

我们可以实现免费使用malloc / realloc的passig大小为零呢?

在下面的代码块realloc的功能同样作为自由吗?


int *x = NULL;

x = (int*)malloc(7*sizeof(int));

memset(x,0,7);

printf("%u  %u  %d\n",&x, x,*x);

free(x);

{C}

回答

评论会员:OriginalGriff 时间:2012/02/06
不一定 - 零长度块是作为释放块不相同,它有一个有效的地址和(可能)上/下运行检查块和分配表占用的空间。一个智能检测系统可能会重新使用相同的零长度块的长度为零,但它并不一定没有可能,如果原编码不认为所有非零块值得花时间的开销(即近所有的人)做检查:查克・奥图尔
评论会员:游客 时间:2012/02/06
嗯,有很多奇怪的条件C标准允许的。imgsrc=但我不会建议他们采用编码风格。例如,你被允许自由()一个NULL指针。您可以realloc()的一个NULL指针和realloc(),然后充当的malloc()你可以realloc()的一个非NULL指针,但指定的大小为0,这样的realloc()则充当自由()他们被允许,但如果你决定使用,而不是通常的库函数作出合理的呼吁那些怪癖,你最终会导致任何人试图跟随/修改你的代码,在未来的很多问题。"招数是为孩子们"(TM)真正的程序员写的代码的可读性和可维护性