回答
您正在嘗試分配1820 * 285 * 5 * sizeof(int)
字節=大約10MB(如果是sizeof(int) == 4
)。這可能比您的操作系統默認情況下爲您提供堆棧分配的字節數多,因此會出現堆棧溢出/段錯誤。
您可以通過在創建線程,在堆上分配或更改OS默認值時要求額外堆棧來解決此問題。
由於您的堆棧段較小,因此1820*285*5
int
s。它通常在1MB附近。
* sizeof(int),超過9MB在一個理智的,32位系統。 – 2010-06-29 19:48:33
是的,謝謝丹。 – 2010-06-29 19:54:55
因爲堆棧溢出。嘗試在堆上分配該數組。
+1用於引用堆棧溢出時的堆棧溢出。 – 2010-06-29 19:51:53
C中的自動變量(默認類型)通常分配在堆棧上。堆棧是爲每個線程分配的內存區域,雖然它可能會在許多操作系統上增長,但它的大小始終有限。 danben's answer很好地覆蓋了默認堆棧,但如果您使用線程,則會在線程創建中分配新的線程(例如,pthread_attr_setstacksize)。一般來說,大堆分配最好在堆上完成(malloc/new),但有時甚至可能太小。然後mmap()或類似的幫助。
danben的回答去了哪裏?它鏈接到some information on stack limits。
int fatblob[1820][286][5];
你想分配180 * 286 * 5 * 4的內存位置(整型讓大小= 4)大約是9.8 MB,所以存在具有更小的缺省堆棧大小的可能性,你的OS。
LINUX具有8192 KB(即8 MB)的堆棧大小。所以很明顯,如果你試圖在堆棧上分配更多的內存,你會得到一個堆棧溢出。
您可以嘗試更改操作系統的堆棧大小。 在Linux下,你可以嘗試的ulimit
的ulimit -s < whateversize你希望它是>
像
$的ulimit -s 1024
我希望它會幫助你。
- 1. 爲什麼命令行參數聲明導致分段錯誤
- 2. PHP:數組聲明導致錯誤500
- 3. 爲什麼會導致「字段名稱不明確」錯誤?
- 4. 這個函數爲什麼會導致段錯誤?
- 5. C中的分段錯誤,同時聲明大指針數組
- 6. 爲什麼strlen在C中導致分段錯誤?
- 7. 這個程序爲什麼會導致段錯誤?
- 8. 這個hostent爲什麼會導致段錯誤?
- 9. 這個程序爲什麼會導致段錯誤?
- 10. pthread_join導致分段錯誤。爲什麼?
- 11. 爲什麼這個數組聲明會入侵下一個?
- 12. 聲明Int變量會導致分段錯誤?
- 13. 爲什麼會導致「exc_bad_access」錯誤?
- 14. 爲什麼它會導致錯誤?
- 15. 爲什麼這會導致SIGABRT錯誤?
- 16. 這爲什麼會導致StackOverFlow錯誤?
- 17. 爲什麼合併這些數組會導致錯誤?
- 18. 爲什麼整數溢出會導致C++ iostreams錯誤?
- 19. 什麼是導致此C代碼中的段錯誤錯誤?
- 20. 爲什麼我會得到一個致命的錯誤「redeclaring」一個只聲明過一次的函數?
- 21. 爲什麼這個php函數會導致嚴重錯誤?
- 22. 什麼導致poll()函數,C++錯誤?
- 23. 爲什麼使用glDrawElements()會導致分段錯誤?
- 24. 爲什麼傳遞shared_from_this()會導致段錯誤?
- 25. 爲什麼簡單地鏈接到GL會導致段錯誤?
- 26. 這爲什麼會導致分段錯誤?
- 27. OSX:爲什麼GetProcessInformation()會導致段錯誤?
- 28. 這段代碼爲什麼會導致分析錯誤?
- 29. 這段代碼爲什麼會導致運行時錯誤?
- 30. 爲什麼此功能會導致最大回收錯誤?
[在聲明大數組時遇到堆棧溢出異常]可能的重複(http://stackoverflow.com/questions/571945/getting-a-stack-overflow-exception-when-declaring-a-large-array ) – 2010-06-29 20:09:54
可能的重複[在C++中創建一個大數組](http://stackoverflow.com/questions/3137598/create-a-big-array-in-c) – bk1e 2010-06-30 04:57:45