尝试调用函数getLazyBitcodeModule时出现段错误。 导致故障的代码如下所示:
// Load the bytecode...
std::string ErrorMsg;
Module *mainModule = 0;
OwningPtr<MemoryBuffer> BufferPtr;
error_code ec = MemoryBuffer::getFileOrSTDIN(InputFile, BufferPtr);
if (ec) {
printf("error loading program '%s': %s\n", InputFile, ec.message().c_str());
exit(1);
}
mainModule = getLazyBitcodeModule(BufferPtr.get(), getGlobalContext(), &ErrorMsg);
gdb调试信息也显示如下:
(gdb) backtrace
#0 0x0000000000000241 in ?? ()
#1 0x000000000040630e in ~OwningPtr (this=0x7fffffffdd20, __in_chrg= <optimized out>) at /usr/local/include/llvm/ADT/OwningPtr.h:45
#2 readBitFile (InputFile=InputFile@entry=0xafec23 "test.bc") at main.cpp:36
#3 0x0000000000405fce in main (argc=2, argv=0x7fffffffde78) at main.cpp:71
有任何解决错误的建议吗?
答案 0 :(得分:0)
如果你查看getLazyBitcodeModule()的实现,你会看到这一行:
R->setBufferOwned(true);
BitcodeReader现在拥有你的缓冲区,并在你被破坏时为你删除缓冲区。你的OwningPtr也释放了相同的内存,因此双重释放导致了段错误。