与libmx链接并使用std :: stringstream时出现g ++ malloc错误

时间:2014-10-24 21:30:42

标签: c++ macos matlab mex stringstream

最简单的例子是以下程序,它与OS X Yosemite上的libmx(-lmx)(用于MATLAB支持)链接,使用来自macports的g ++ 4.9.1编译:

#include <sstream>

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

我意识到在ostr销毁时(在退出程序之前),我得到了一个malloc运行时错误的形式:

testcpp(5362,0x7fff7d2af300) malloc: *** error for object 0x1055b6270: 
pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug

另一方面,如果我取消注释main()中的第二行并向ostringstream写一些内容,那么程序就会愉快地退出而不会出现更多错误。这只发生在g ++,clang ++编译并运行它没有任何问题。任何人都知道这是g++相关问题还是libmx问题?

PS:如果我在链接时没有使用-lmx标志,则不会再出现malloc错误。

1 个答案:

答案 0 :(得分:1)

我想最好分别对此发表评论。正如我所说,我在重现你的错误时遇到了麻烦。我使用g ++ 4.8.2在Ubuntu Linux 14.04 64位上,我下载了Matlab Compiler Runtime v83和v84 for Linux 64位。

我正在编译的来源如下:

#include <sstream>

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

以下命令运行正常(2014 a和b):

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