我已經讀過calloc(malloc + init)有時會失敗初始化數組與零字節(但仍然會返回指向malloc'ed數組的指針)。但在documentation它沒有指定它會返回NULL,有沒有一種方法來確保數組被初始化爲零(更好然後去數組),如果沒有calloc超過malloc的優勢是什麼?我怎麼能知道,如果calloc未能初始化
2
A
回答
4
如果calloc()
返回一個非NULL指針,則內存塊將被置零。
除非你有一個錯誤的庫。在這種情況下,你應該謹慎行事。也許可以考慮獲得一個新的工具鏈,修復bug(大多數庫都附帶源代碼),或者在malloc()
之上編寫自己的calloc()
版本。
我認爲calloc()
的機會是堅如磐石的,除非你有一個絕對古老的,預標準的編譯器,或者一些編譯器針對非常非常小的系統,他們覺得需要切角我會假設他們會記錄在案)。
+0
謝謝,文檔需要添加這個,它寫在那裏:「_如果函數未能**分配所請求的內存塊,則返回一個NULL指針。」 - 未能**分配**未失敗**初始化**。 – 2012-02-15 08:27:28
+3
那麼,如果它成功地分配它,那麼初始化意味着已經成功。如果您無法初始化(即寫入)您似乎已分配的內存塊,則會遇到更大的問題。 – tangrs 2012-02-15 08:46:46
相關問題
- 1. 我怎麼能初始化C++類
- 2. Java,我怎樣才能避免「可能未被初始化」
- 3. 我怎麼能知道的信號
- 4. 我怎麼能知道的AppDelegate
- 5. 我怎麼能知道一個PrintWriter
- 6. 我怎麼能知道在Linux上
- 7. 我怎麼能知道,如果一個節點exsits或不
- 8. 我怎麼能在我的課初始化引用屬性
- 9. NSManagedObject未能初始化
- 10. 我怎麼能知道mongodb是否由貓鼬開始?
- 11. 我怎麼能初始化的boost ::原子變量
- 12. 我怎麼能初始化一個UIAlertView中的文本字段
- 13. 我怎麼能初始化unordered_map < vector<int>>?
- 14. 我怎麼能初始化try catch塊中的val對象?
- 15. 我怎麼能知道mongo數據未使用的空間
- 16. 我怎麼初始化數組,當我不知道會有多少物品
- 17. C++:如何防止「可能未初始化的警告」,如果我確定它未被初始化?
- 18. 我怎麼可以初始化我的數組時,我不能初始化爲空?
- 19. 對象未初始化不知道爲什麼
- 20. 我怎麼能知道何時LLVM改變簽名功能
- 21. 我怎麼能知道PowerShell的功能被忽略了
- 22. NSMutableArray初始化後未知
- 23. 變量初始化並聲明後可能尚未初始化
- 24. 你怎麼知道可能有例外?
- 25. JavaScript - 想知道這怎麼可能
- 26. 變量'gestureDetector'可能尚未初始化
- 27. 變量可能未從Scanner初始化?
- 28. 可變objectPO可能尚未初始化
- 29. 未能初始化DTE對象
- 30. 變量vYourName可能尚未初始化
無論是[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