【发布时间】:2011-05-31 16:55:37
【问题描述】:
我有一个自定义的 TCL 解释器。这里是:
// file main.cpp
#include <tcl.h>
#include <string>
int argc = 0;
char** argv = 0;
int
Tcl_AppInit( Tcl_Interp* interp )
{
if ( Tcl_Init( interp ) == TCL_ERROR ) {
return TCL_ERROR;
}
for ( int i = 1; i < argc; ++i ) {
if ( Tcl_Eval( interp, ("source " + std::string( argv[i] )).c_str() ) == TCL_ERROR ) {
return TCL_ERROR;
}
}
return TCL_OK;
}
int
main( int argc, char** argv )
{
::argc = argc;
::argv = argv;
Tcl_Main( 1, argv, &Tcl_AppInit );
return 0;
}
我使用以下命令构建main.cpp:
g++ -DNDEBUG -O3 -fpic -Wall -pedantic -fno-strict-aliasing \
-Wl,-R/usr/local/lib -L/usr/local/lib -ltcl main.cpp -o myinterp
有时myinterp 会因为这样的错误消息而崩溃:
free(): invalid pointer: 0x00002b04078aa000 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3723c722ef]
/lib64/libc.so.6(cfree+0x4b)[0x3723c7273b]
/lib64/libc.so.6(_IO_free_backup_area+0x18)[0x3723c6e1d8]
/lib64/libc.so.6(_IO_file_overflow+0x1d2)[0x3723c6c1d2]
/lib64/libc.so.6(_IO_file_xsputn+0xf2)[0x3723c6ce22]
/lib64/libc.so.6(_IO_vfprintf+0x1b0)[0x3723c428a0]
/lib64/libc.so.6(_IO_fprintf+0x88)[0x3723c4d358]
main.cpp 有问题吗?什么可能导致此崩溃?
【问题讨论】: