내가 정의 TCL 인터프리터를 가지고와 "자유() 잘못된 포인터를". 여기있다 : 나는 다음과 같은 명령을 main.cpp
를 구축방법 : 사용자 지정 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;
}
:
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
에 문제가 있습니까? 이 충돌을 일으키는 원인은 무엇일까요? AddressOf를 & 조작없이
Tcl_Main(argc, argv, Tcl_AppInit);
:
Valgrind의 시간 : –