Skip to content

[已解決] ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000000d4 at pc 0x0000003a4fa9 bp 0x7ffedf29d730 sp 0x7ffedf29d728 READ of size 4 at 0x6020000000d4 thread T0

Last Updated on 2021-10-06 by Clay

最近在練習解 LeetCode 的題目時,突然間跳出了一個沒有提供任何行號的報錯:

ERROR: AddressSanitizer: heap-buffer-overflow on address

這令人困擾的,突然間一下子不知道如何 DEBUG。

上網查了一下,這才發現 Address Sanitizer 是個檢查記憶體存取是否錯誤的工具,在一般於本機端自己寫編譯程式執行的時候因為沒有設定,所以幾乎肯定不會遇到,因為 C/C++ 編譯器通常不會替你的記憶體存取做邊界檢查

但是在 LeetCode 執行測試程式時,由於嚴格地控制你上傳的程式不要存取並非你所要求的記憶體區塊,所以在錯誤要求記憶體區塊時會回傳此一錯誤訊息。


解決方法

解決方法很單純卻很麻煩:確認自己沒有做超過記憶體邊界的請求。最常見的狀況之一,就是呼叫超過陣列物件長度的 index 元素。

在網路上看到許多人添加了判斷式防止自己存取錯誤的索引,這也是一種可能的方法。

當然,若想要徹底解決這個問題,也可以在自己的本機端環境中安裝 Address Sanitizer 工具來測試。


References


Read More

Leave a Reply