2016-09-25 4 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

関連する問題