AddressSanitizer:地址错误时堆栈溢出?
AddressSanitizer: stack-overflow at address error?
所以,我做了一个使用递归反转链表的函数。我的反向函数工作正常,但是当我尝试在我的可执行文件上 运行 asan 时,它在反向函数的特定地址处给我一个堆栈溢出错误。我已经尝试了一切来修复它。完成工作后,我试图将堆栈中的所有变量设为 NULL。我已经从堆中取消分配所有内存。我在文件上 运行 valgrind,它告诉我所有内存都已释放并且没有泄漏。我该怎么办?
AddressSanitizer: stack-overflow
P.S。我在 C++ 中使用 clang++ 编译器。
ASAN 会增加您的内存需求,因为它会在堆栈中插入标记值。因此,您可能没有正常达到堆栈限制,但您现在启用了 ASAN,因为每个递归调用现在使用比以前更多的堆栈 space。
在 C++ 中做的最好的事情是不要递归那么深,但是你也可以增加进程的堆栈限制,例如在 bash:
ulimit -s unlimited
所以,我做了一个使用递归反转链表的函数。我的反向函数工作正常,但是当我尝试在我的可执行文件上 运行 asan 时,它在反向函数的特定地址处给我一个堆栈溢出错误。我已经尝试了一切来修复它。完成工作后,我试图将堆栈中的所有变量设为 NULL。我已经从堆中取消分配所有内存。我在文件上 运行 valgrind,它告诉我所有内存都已释放并且没有泄漏。我该怎么办?
AddressSanitizer: stack-overflow
P.S。我在 C++ 中使用 clang++ 编译器。
ASAN 会增加您的内存需求,因为它会在堆栈中插入标记值。因此,您可能没有正常达到堆栈限制,但您现在启用了 ASAN,因为每个递归调用现在使用比以前更多的堆栈 space。
在 C++ 中做的最好的事情是不要递归那么深,但是你也可以增加进程的堆栈限制,例如在 bash:
ulimit -s unlimited