gpt4 book ai didi

c++ - 0x00000000 处的段错误

转载 作者:行者123 更新时间:2023-11-30 04:12:07 24 4
gpt4 key购买 nike

那么让我从错误开始。运行 GDB 时,我不断遇到此段错误:

#0  0x00000000 in ?? ()
#1 0x0804aacc in find_closest_object (list=0x8052928, base=0xbffff148,
dir=0xbffff130, last_hit=0x0, retdist=0xbffff0f0) at raytrace.c:34
#2 0x0804ab96 in ray_trace (model=0x80528f0, base=0xbffff148, dir=0xbffff130,
pix=0xbffff160, total_dist=0, last_hit=0x0) at raytrace.c:80
#3 0x0804a99a in make_pixel (model=0x80528f0, x=0, y=0) at image.c:29
#4 0x0804aa09 in make_row (model=0x80528f0, y=0) at image.c:47
#5 0x0804aa53 in image_create (model=0x80528f0, out=0x8052788) at image.c:69
#6 0x08048aed in main (argc=3, argv=0xbffff2b4) at main.c:30

基本上,我一直在 ?? 中收到 0x00000000 的未知错误。这到底是什么意思?在光线追踪的第 34 行,它说:

  dist = obj->hits(base, dir);

关于问题可能是什么的任何线索?如有必要,我可以发布更多内容,但不确定到底需要什么。感谢您的帮助!

编辑:last_hit 应该是 NULL,所以不是。

最佳答案

您可能正在调用一个尚未初始化的虚函数。当 C++ 创建一个对象时,它倾向于清除虚拟表,然后根据需要复制表的部分。如果您在所有构造函数运行之前调用一个函数,那么其中一些指针将为 NULL,并且尝试调用它们将执行您描述的操作。

但是,如果 obj->hits() 不是虚函数,那么无论它做什么都会破坏堆栈,并且在 RTS 指令(或等效指令)运行时返回的 IP 地址为 NULL。此时处理器会尝试在该 NULL 地址处执行代码。当在堆栈上创建缓冲区时,这称为缓冲区溢出。

这就是您会遇到此类错误的两个主要原因。在 MS-Windows 下,我已经看到在您尝试多次释放同一内存缓冲区后也会发生这些情况。但这不太可能最终为 NULL。

关于c++ - 0x00000000 处的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19942891/

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