2016-09-25 152 views
-3

所以,我已經做了一個函數來反轉鏈表使用遞歸。我的反轉函數工作正常,但是當我嘗試在我的可執行文件上運行asan時,它在反向函數的特定地址處給我一個堆棧溢出錯誤。我已經嘗試了一切來解決它。我試圖在工作完成後讓堆棧中的所有變量爲NULL。我已經從堆中取消了所有內存。我在文件上運行了valgrind,它告訴我所有的內存已經被釋放並且沒有泄漏。我該怎麼辦?AddressSanitizer:堆棧溢出地址錯誤?

AddressSanitizer: stack-overflow

P.S.我在C++中使用了clang ++編譯器。

+4

您的代碼有一個錯誤。 –

+0

什麼樣的錯誤? – Shank

+2

@Akkida_x基於你給我們什麼,我猜想堆棧溢出 – kfsone

回答

1

ASAN增加了您的內存需求,因爲它將標記值插入堆棧。所以有可能你沒有正常達到堆棧限制,但你現在啓用了ASAN,因爲每個遞歸調用現在使用的堆棧空間比以前多。

在C++中最好的做法是不要遞歸太深,但是你也可以增加你的進程的堆棧限制,例如,在bash中:

ulimit -s unlimited