gpt4 book ai didi

c++ - 无法在地址错误处访问内存

转载 作者:可可西里 更新时间:2023-11-01 18:21:47 31 4
gpt4 key购买 nike

我收到这个错误:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000407265 in Quadtree::deeper (this=0x7fffffffe430,
orig=@0x7fffffffe430, n=@0x7a1da0, tol=Cannot access memory at address 0x7fffff3feffc
) at quadtree.cpp:47
47 int Quadtree::deeper(QuadtreeNode * & orig, QuadtreeNode * & n, int tol, int tolNum) {

这是第 47 行:

int Quadtree::deeper(QuadtreeNode * & orig, QuadtreeNode * & n, int tol, int tolNum) {

奇怪的是,我根本没有收到任何 valgrind 错误,但在运行时只有 gdb 错误和段错误。这个错误在一般意义上可能意味着什么(无需查看我的其余代码)?

最佳答案

我的最佳猜测:您看到堆栈溢出(考虑到我们所在的站点,真是巧合!:)。我无法解释为什么 Valgrind 没有捕捉到它:通常 Valgrind 使用与操作系统相同的堆栈大小(至少在我的系统上)。

此错误意味着您的代码试图访问地址 0x7fffff3feffc 处的内存——无论是读取还是写入,但该地址当前未内存映射到您的地址空间。执行此非法读取或写入的指令位于内存地址 0x0000000000407265

如果编译器将函数左大括号的行号作为违规行,则它可能在函数的序言(将寄存器保存到堆栈的部分)中。这就是为什么我怀疑你有堆栈溢出。

在 Linux 上,您可以查看 /proc/YOUR-PID/maps 以获得整个过程的内存映射。它将向您显示堆栈和堆的存储位置,以及库的加载位置。您可以使用此信息来确定可能溢出的内存部分。由于堆栈通常(在 Linux 上)位于内存的最顶部,您可能会发现这个非常大的地址非常靠近您的堆栈。

祝你好运!

关于c++ - 无法在地址错误处访问内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5519824/

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