【问题标题】:malloc: *** error for object 0x1029249b0: pointer being freed was not allocatedmalloc:对象 0x1029249b0 的 *** 错误:未分配被释放的指针
【发布时间】:2013-09-21 22:37:02
【问题描述】:

我正在尝试在带有 xcode 3.2.6 的 mac OS X 10.6.8 上编译包含 -std=c++0x 的程序。我用自制软件将我的 g++ 编译器升级到 g++-4.7。在我的 makefile 中,我更改了以下行:

CXX          = g++
CXXFLAGS     = -std=c++0x
LD           = g++
LDFLAGS      = -L.

到:

CXX          = g++-4.7
CXXFLAGS     = -std=c++0x
LD           = g++-4.7
LDFLAGS      = -L.

但是,这条线不起作用:

$(CC) -c -Icore/include/ -Ianalysis/include -Ieventbuilders/include -Isimdut/include -Istyle/include $(CXXFLAGS) $< -o $@

所以我把它改成:

$(CXX) -c -Icore/include/ -Ianalysis/include -Ieventbuilders/include -Isimdut/include -Istyle/include $(CXXFLAGS) $< -o $@

现在一切都编译了,但是当我运行我的文件时,我收到以下错误:

tbmon(25203) malloc: *** error for object 0x1029249b0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap

有人可以告诉我我做错了什么吗?提前谢谢!

【问题讨论】:

  • 没有看到代码,几乎不可能说这是编译器中的错误(可能不是)还是您的代码中的错误。

标签: c++ pointers gcc c++11


【解决方案1】:

您的程序中有一个错误,它调用free() 的指针不是通过malloc() 获得的。或者触发此行为的代码中的其他一些与内存相关的错误。

您提供的 Make 文件与此问题无关。您必须修复程序代码。

【讨论】:

  • 由于是 C++,也可以调用delete,然后使用free 进行内存释放。
  • @MatsPetersson:可能。关键是程序代码有问题,makefile 不太可能修复它... :-|
【解决方案2】:

只是将编译器从 gcc 更改为 g++ 不会导致 free(3) 失败。您能否发布一个演示该问题的最小示例?

【讨论】:

  • 如果程序的行为未定义,它可以很容易地做到这一点。该程序已经存在错误,但没有显示出这种特殊症状。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 2013-09-17
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
相关资源
最近更新 更多