0
A
回答
2
什麼是分段錯誤的在下面一行的可能原因是什麼?
線路本身極不可能導致分段錯誤。可能發生的唯一方法是如果你已經用盡堆棧。做(gdb) x/i $pc
。崩潰指令是PUSH
還是CALL
?如果是這樣,堆棧耗盡可能是原因。
如果代碼是通過優化編譯的,並且崩潰指令是MOVDQA
或類似錯誤,那麼棧錯誤對齊可能是由於:堆棧中的某些代碼沒有按照16字節邊界對齊堆棧目前的ABI。你是否鏈接了一些非常古老的歸檔庫?您是否使用-mpreferred-stack-boundary=2
或1
構建了一些代碼?餿主意!
如果(更容易)的崩潰不會真的發生在該行,而是從稱爲該行一些代碼,特別是如果被調用代碼裏面malloc
,那麼以前的堆腐敗最有可能的原因。
要找到它,請使用Valgrind或Address Sanitizer。
+0
@Dani馬上指出,問題是以前的堆腐敗。 – dPol
相關問題
- 1. std :: map初始化std :: vector
- 2. 爲什麼不初始化std :: vector <T>初始化T?
- 3. std :: vector :: push_back拋出分段錯誤
- 4. 使用boost :: assign :: list_of初始化std :: vector <std :: vector <int>>
- 5. 用lambdas初始化std :: unique_ptr的std :: vector
- 6. std :: vector用於std :: array初始化
- 7. 初始化FMOD時出現錯誤
- 8. 初始化引用時出現錯誤
- 9. std :: map <MyClass,std :: vector <MyClass>>段錯誤。奇數
- 10. std :: vector的高效初始化
- 11. 初始化結構的std :: vector
- 12. 爲什麼初始化結構時會出現段錯誤?
- 13. 初始化多個節點時出現段錯誤
- 14. C++:初始化指針隊列時出現段錯誤
- 15. 發送帶有std :: vector成員的結構體時出現分段錯誤
- 16. 在C++中迭代std :: set <std::string>時出現分段錯誤
- 17. 初始化文件作用域變量時出現分段錯誤
- 18. 循環中的存儲器初始化:空閒時出現分段錯誤
- 19. vector <vector<int>>需要太長的初始化
- 20. Python初始化段錯誤
- 21. std :: vector <std :: vector <T>> vs std :: vector <T*>
- 22. C++初始化數組初始化向量時的分段錯誤
- 23. VECTOR初始化C++
- 24. iterate std :: vector <std :: vector <char>>?
- 25. 「類型'std :: vector'的右值的非常量引用類型'std :: vector&'的無效初始化錯誤
- 26. 使用迭代器從std :: list初始化std :: vector
- 27. 在初始化時預填一個std :: vector嗎?
- 28. 爲什麼std :: vector在初始化時強制複製?
- 29. 初始化對象時拋出錯誤
- 30. 覆蓋向量<vector<>>和分段錯誤
以前的堆損壞 – Dani
我該如何發現它? – dPol
valgrind將是一個選項 – Dani