最简单的例子是以下程序,它与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错误。
答案 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