2014-10-24 5 views
1

가장 간단한 예제는 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 오류가 발생하지 않습니다.

+0

.. 그것은 아마 어떻게 이상한 문제가되지 않습니다

#include <sstream> int main() { std::ostringstream ostr; // ostr << " "; // if I un-comment this line no more malloc error } 

을 그리고 다음 명령 (2014 및 b)는 잘 실행 :

내가 컴파일하고 소스는 다음과 같다 그러나 왜 당신은'libxx'에 어떤 Matlab 라이브러리를 포함하지 않고'mexFunction'도없는 파일에 링크하고 있습니까? 'mex.h '를 아마도 포함시켜 보시고 main 뒤에'void mexFunction (int nargout, mxArray * out [], int nargin, const mxArray * in [] (main(); }'? – Sheljohn

+0

아니요, 아니요, 제 프로그램에 포함 시키겠습니다.하지만 이것은 버그가 나타나는 최소한의 예일뿐입니다. 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

+0

@ Sh3ljohn 버그를 재현 할 수 있습니까? – vsoftco

답변

1

이 부분에 대해 별도로 의견을 제시하는 것이 좋습니다. 내가 말했듯이, 나는 당신의 실수를 재현하는 데 어려움을 겪고있다. 나는 우분투 리눅스 14.04에서 64 비트를 g ++ 4.8.2로 사용했고 리눅스 64 비트에 대해서는 Matlab Compiler Runtime v83과 v84를 다운로드했다. ,

g++ -L/opt/MATLAB/MCR/v83/runtime/glnxa64 -Wall malloc_gcc_matlab.cpp -o malloc_gcc_matlab && ./malloc_gcc_matlab 
g++ -L/opt/MATLAB/MCR/v84/runtime/glnxa64 -Wall malloc_gcc_matlab.cpp -o malloc_gcc_matlab && ./malloc_gcc_matlab 
+0

그래, 고마워, 아마도 그 결함을 생산하는 OS X/g ++/libmx 사이의 조합 일 것이다. 그것은 또한 R2014b에서만 나타납니다. 내 생각 엔 g ++ (g ++ 4.9.1)과 관련이있다. clang ++은 잘 실행된다. – vsoftco

+0

나는 이것이 OSX에서 gcc와 clang 사이의 문제라고 생각한다. (libstdC++와 libC++가 가장 관련이있다). 유용한 컴파일러는 Apple의 Xcode이므로 GCC를 사용하려면 MEX 컴파일 옵션을 변경해야 할 수도 있습니다. http://www.mathworks.com/support/compilers/R2014b/index.html?sec= maci64 – Amro

+0

@Amro, 감사합니다! clang ++가 아직 openmp를 지원하지 않기 때문에 다소 불행합니다. – vsoftco