我怎么能知道,如果calloc未能初始化
我已经读过calloc(malloc + init)有时会失败初始化数组与零字节(但仍然会返回指向malloc'ed数组的指针)。但在documentation它没有指定它会返回NULL,有没有一种方法来确保数组被初始化为零(更好然后去数组),如果没有calloc超过malloc的优势是什么?我怎么能知道,如果calloc未能初始化
如果calloc()
返回一个非NULL指针,则内存块将被置零。
除非你有一个错误的库。在这种情况下,你应该谨慎行事。也许可以考虑获得一个新的工具链,修复bug(大多数库都附带源代码),或者在malloc()
之上编写自己的calloc()
版本。
我认为calloc()
的机会是坚如磐石的,除非你有一个绝对古老的,预标准的编译器,或者一些编译器针对非常非常小的系统,他们觉得需要切角我会假设他们会记录在案)。
谢谢,文档需要添加这个,它写在那里:“_如果函数未能**分配所请求的内存块,则返回一个NULL指针。” - 未能**分配**未失败**初始化**。 – 2012-02-15 08:27:28
那么,如果它成功地分配它,那么初始化意味着已经成功。如果您无法初始化(即写入)您似乎已分配的内存块,则会遇到更大的问题。 – tangrs 2012-02-15 08:46:46
无论是[Linux手册页](http://linux.die.net/man/3/calloc),[MSDN手册页](http://msdn.microsoft.com/en-us/library /3f8w183e(v=vs.100).aspx)或[POSIX手册页](http://pubs.opengroup.org/onlinepubs/9699919799/functions/calloc.html)提到了这种情况。你在哪里读过关于它没有设置内存的问题? – 2012-02-15 08:26:45
_“如果函数未能**分配请求的内存块,则返回一个NULL指针。”_ **分配**不是** init ** http://www.cplusplus.com/reference/ clibrary/cstdlib/calloc/ – 2012-02-15 08:31:50
@samray:C标准对此非常一致,如果它没有描述库函数失败(以特定的方式),那么它不会失败(以这种方式)。所以你可能会问'memset'失败时会发生什么,因为当'calloc'无法清除内存时会发生什么情况。两者的答案都是一样的 - 不允许失败。 – 2012-02-15 09:29:22