尝试在C ++中创建新对象时出现总线错误

时间:2013-04-29 18:39:45

标签: c++ object bus-error

在尝试使用C ++创建对象时,我遇到了一个奇怪的总线错误。当程序崩溃时,这是我的gdb回溯:

#0  0xff146ff4 in _malloc_unlocked () from /usr/lib/libc.so.1
#1  0xff146e40 in malloc () from /usr/lib/libc.so.1
#2  0x24430 in __builtin_new (sz=128) at /usr/local/src/gcc-2.95.1/gcc/cp/new1.cc:84
#3  0x1e71c in FileHeader::Allocate (this=0x3f5d8, freeMap=0x3eea0, fileSize=5719)
    at ../filesys/filehdr.cc:63
#4  0x1f61c in FileSystem::Create (this=0x3d8b8, name=0xffbff8f3 "test", initialSize=5719)
    at ../filesys/filesys.cc:200
#5  0x1ffac in Copy (from=0xffbff8e4 "assignment 2.c", to=0xffbff8f3 "test")
    at ../filesys/fstest.cc:52
#6  0x15150 in main (argc=3, argv=0xffbff768) at ../threads/main.cc:116

filehdr.cc的相关代码行是:

IndirectHeader * s;
s = new IndirectHeader;

它在第二行崩溃了。我认为可能是我没有明确地使用我自己的构造函数,但添加一个似乎没有帮助。在我看来,有一些其他简单的问题,我没有注意到,但我一直无法找到它..任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

你在回溯中看到的是崩溃,分配内存以支持你的IndirectHeader。它还没有开始构建对象,因为它仍在尝试为它分配内存。很可能早期程序中存在一个错误,它已经破坏了堆。