AddressSanitizer:地址错误时堆栈溢出?

时间:2016-09-25 21:09:32

标签: c++ clang++

所以,我已经创建了一个使用递归来反转链表的函数。我的反向功能工作正常,但是当我尝试在我的可执行文件上运行asan时,它在反向函数中的特定地址给出了堆栈溢出错误。我已经尝试了一切来解决它。我的工作完成后,我试图将堆栈中的所有变量都设为NULL。我已从堆中取消分配所有内存。我在文件上运行valgrind,它告诉我所有内存已被释放,并且没有泄漏。我该怎么办?

AddressSanitizer: stack-overflow

P.S。我在C ++中使用clang ++编译器。

1 个答案:

答案 0 :(得分:1)

ASAN增加了内存需求,因为它在堆栈上插入了标记值。因此,您可能没有正常达到堆栈限制,但现在启用了ASAN,因为现在每个递归调用使用的堆栈空间比以前多。

在C ++中最好的做法是不要如此深入地进行递归,但是你也可以增加进程的堆栈限制,例如:在bash:

ulimit -s unlimited