2015-02-11 108 views
-1

尝试调用函数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 

任何建议来解决这个错误吗?

回答

0

如果你看看getLazyBitcodeModule里面执行(),你会看到一行:

R->setBufferOwned(true); 

的BitcodeReader现在拥有的缓冲区,将删除缓存为你当它被摧毁。你的OwningPtr也释放了相同的内存,所以double free导致了段错误。