가장 간단한 예제는 macports에서 g ++ 4.9.1로 컴파일 된 OS X Yosemite에서 libmx (-lmx
) (MATLAB 지원)와 연결된 다음 프로그램입니다. :libmx와 연결하고 std :: stringstream을 사용할 때 g ++ malloc 오류가 발생합니다.
testcpp(5362,0x7fff7d2af300) malloc: *** error for object 0x1055b6270:
pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug
경우, 다른 한편으로는, 나는 두 번째의 주석 :
#include <sstream>
int main()
{
std::ostringstream ostr;
// ostr << " "; // if I un-comment this line no more malloc error
}
나는 ostr
파괴에 (그냥 프로그램을 종료하기 전에), 난 형태의 malloc에 런타임 오류가 있음을 깨달았 main()
에 줄을 써서 ostringstream
이면 프로그램이 더 이상 오류없이 행복하게 종료됩니다. 이것은 g ++에서만 발생하며 clang ++는 문제없이 컴파일하고 실행합니다. 이 사람이 g++
관련 문제인지 또는 libmx
사람인지 알 수 있습니다.
추신 : 연결시 -lmx
플래그를 사용하지 않으면 더 이상 malloc 오류가 발생하지 않습니다.
.. 그것은 아마 어떻게 이상한 문제가되지 않습니다
을 그리고 다음 명령 (2014 및 b)는 잘 실행 :
내가 컴파일하고 소스는 다음과 같다 그러나 왜 당신은'libxx'에 어떤 Matlab 라이브러리를 포함하지 않고'mexFunction'도없는 파일에 링크하고 있습니까? 'mex.h '를 아마도 포함시켜 보시고 main 뒤에'void mexFunction (int nargout, mxArray * out [], int nargin, const mxArray * in [] (main(); }'? – Sheljohn
아니요, 아니요, 제 프로그램에 포함 시키겠습니다.하지만 이것은 버그가 나타나는 최소한의 예일뿐입니다. Eigen 행렬을 MATLAB 형식으로 저장하고 .mat 파일에서 다시로드 할 수 있도록 사용하고 있습니다. 전체 소스 코드 (여기에 올릴 수있는 큰 방법)는 https://github.com/vsoftco/qpp에 있으며 MATLAB 함수를 사용하는 파일은 https://github.com/vsoftco/qpp/blob/입니다. master/include/matlab.h 그리고'ostringstream'이있는 https://github.com/vsoftco/qpp/blob/master/include/io.h에서'disp'라는 함수를 사용할 때마다 버그가 나타납니다. 서식 지정에 사용 @ – vsoftco
@ Sh3ljohn 버그를 재현 할 수 있습니까? – vsoftco