由於malloc返回NULL,有沒有什麼辦法來檢測使用VLA的堆棧內存不足?VLA的內存可用於海灣合作委員會
回答
C中沒有任何東西可以保證聲明VLA或檢查內存使用失敗的成功。對於任何自動對象聲明,VLA與否都是如此。
感謝您的回答,當沒有足夠的空間存儲自動對象時,會發生什麼情況?程序無法啓動,因爲運行時知道所需的空間?它開始但崩潰? (請原諒我的英文不好) – 2013-02-28 10:09:27
@DavidRF通常在聲明對象後,它會在進入函數後不久就開始崩潰(例如分段錯誤)。但它可能做任何事情,因爲我們處於未定義行爲的領域。 – ouah 2013-02-28 10:12:42
malloc()
檢查堆,VLAs
工作增加堆棧大小。如果malloc()
返回NULL
可能是您的堆棧已被填充。
正如WhozCraig指出的那樣,不要與VLA賭博。如果數組大小很大 - 請使用malloc()
你可以希望發生崩潰,但最糟糕的情況是,事情看起來會起作用,最終你會寫入其他內存。默認情況下,至少gcc不會生成驗證內存是否可用的代碼(儘管它有一個選項),所以足夠大的VLA可能會在任何地方結束。在MacOS上,你只需要一個線程中的0.5MB VLA來意外地寫入其他線程的堆棧。 Linux上10MB。
如果您不能保證VLA很小(小於一頁或兩頁),請不要使用它。
- 1. 編譯與海灣合作委員會
- 2. 內聯英特爾語法內聯海灣合作委員會
- 3. 如何防止海灣合作委員會內聯
- 4. 海灣合作委員會內部原子比較和交換
- 5. _USE_32BIT_TIME_T相當於海灣合作委員會
- 6. 分叉一個孩子,並調用海灣合作委員會
- 7. 使用編譯包(POP,1)與海灣合作委員會
- 8. 如何應用海灣合作委員會補丁
- 9. 海灣合作委員會x64函數調用
- 10. 「海灣合作委員會」 的命令是指 「perl」 的
- 11. 海灣合作委員會源代碼中的函數
- 12. 鏈接到海灣合作委員會的庫
- 13. 海灣合作委員會優化級別1的子選項
- 14. 我如何強制海灣合作委員會'bool'的大小
- 15. 交叉編譯海灣合作委員會的失敗(Python)
- 16. 海灣合作委員會,奇怪的整數推廣計劃
- 17. 海灣合作委員會的元組模板
- 18. 海灣合作委員會:-O3和-Os之間的區別
- 19. 瞭解海灣合作委員會'-fmem-report`的輸出
- 20. C++ 0x:線程,海灣合作委員會或我的錯誤?
- 21. 手動定義外部符號與海灣合作委員會
- 22. Fedora 21與叮噹,沒有海灣合作委員會
- 23. 海灣合作委員會將私人繼承到父母
- 24. boost無法移動scoped_lock與海灣合作委員會
- 25. 從海灣合作委員會鏈接到winmm.dll
- 26. 功能指針與海灣合作委員會,分配地址
- 27. LAPACK與海灣合作委員會啓動指南
- 28. 食人魔構建海灣合作委員會4.7
- 29. 交叉編譯海灣合作委員會
- 30. 控制海灣合作委員會優化
出現堆棧錯誤。如果你認爲這個數字可能不合理,不要賭博;使用'malloc()' – WhozCraig 2013-02-28 09:32:13
「如果你不得不問,你買不起。」 – 2013-02-28 14:22:42