gpt4 book ai didi

c++ - 如何防止堆栈损坏?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:15 25 4
gpt4 key购买 nike

我正在尝试在 Android 的 native 应用程序中调试段错误。GDB 显示如下:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 5200]
0xbfcc6744 in ?? ()
(gdb) bt
#0 0xbfcc6744 in ?? ()
#1 0x5cfb5458 in WWMath::unProject (x=2.1136094475592566, y=472.2994384765625, z=0, mvpMatrix=@0x0,
viewport=@0x0, result=@0x0) at jni/src/core/util/WWMath.cpp:118
#2 0x00000000 in ?? ()

有没有可能得到一个好的堆栈?或者找到堆栈损坏的地方?

更新:提到的功能需要引用:

bool WWMath::unProject(double x, double y, double z, const Matrix &mvpMatrix,
const Rect& viewport, Vec4& result)

并且对简单局部变量的引用作为最后一个参数传递:

Vec4 far, near;
if (!unProject(x, y, 0, tMvp, viewport, near))

最佳答案

我们没有太多信息可以引用!除了小心寻址外,没有避免内存损坏的一般规则。

但在我看来你溢出了一个 float 数组,因为伪造的地址 0xbfcc6744 equates到合理的 float-1.597,这与 GDB 报告的其他值一致。

覆盖返回地址会导致执行跳转到该值,因此请专门查看函数 WWMath::unProject 的调用者(其局部变量位于其返回地址之前),以找到有问题的缓冲区。 (现在我们有了它,near。)

关于c++ - 如何防止堆栈损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11844631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com