回答
您正在嘗試分配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. C++的Linux:聲明一個類數組導致分段錯誤
- 2. 3D數組聲明導致段錯誤
- 3. 爲什麼命令行參數聲明導致分段錯誤
- 4. 爲什麼會導致段錯誤?
- 5. 爲什麼vmovapd會導致段錯誤?
- 6. 爲什麼此數組分配會導致段錯誤?
- 7. 爲什麼會導致「字段名稱不明確」錯誤?
- 8. PHP:數組聲明導致錯誤500
- 9. 這個函數爲什麼會導致段錯誤?
- 10. 什麼會導致錯誤「聲明失敗 - [UICollectionViewData numberOfItemsBeforeSection:]」?
- 11. C中的分段錯誤,同時聲明大指針數組
- 12. 這個警衛聲明爲什麼會給我一個錯誤?
- 13. C:傳遞二維數組的一維會導致段錯誤
- 14. 爲什麼strlen在C中導致分段錯誤?
- 15. 這個程序爲什麼會導致段錯誤?
- 16. 這個hostent爲什麼會導致段錯誤?
- 17. 這個程序爲什麼會導致段錯誤?
- 18. 這個shellcode爲什麼會導致分段錯誤?
- 19. 爲什麼printf導致分段錯誤?
- 20. pthread_join導致分段錯誤。爲什麼?
- 21. 爲什麼這個數組聲明會入侵下一個?
- 22. 打字稿聲明:爲什麼這會拋出一個錯誤
- 23. 爲什麼這會導致SIGABRT錯誤?
- 24. PDO:爲什麼會導致錯誤?
- 25. 爲什麼這會導致錯誤?
- 26. 爲什麼它會導致錯誤?
- 27. 爲什麼會導致「exc_bad_access」錯誤?
- 28. 這爲什麼會導致StackOverFlow錯誤?
- 29. .val()爲什麼會導致錯誤?
- 30. 爲什麼CPPUNIT_ASSERT_MESSAGE會導致OpenMP錯誤?
[在聲明大數組時遇到堆棧溢出異常]可能的重複(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