调用getlazybitcodemodule时出现段错误
问题描述:
尝试调用函数getLazyBitcodeModule时出现段错误。 引起故障的代码如下所示:调用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 ([email protected]=0xafec23 "test.bc") at main.cpp:36
#3 0x0000000000405fce in main (argc=2, argv=0x7fffffffde78) at main.cpp:71
任何建议来解决这个错误吗?
答
如果你看看getLazyBitcodeModule里面执行(),你会看到一行:
R->setBufferOwned(true);
的BitcodeReader现在拥有的缓冲区,将删除缓存为你当它被摧毁。你的OwningPtr也释放了相同的内存,所以double free导致了段错误。