我的OS X项目中有一些C ++代码,因此分配了一个数组:
C * p = new C[lengthHint + 2];
这是一个模板类; C
是unsigned short
。 lengthHint
是1.这都是无关紧要的。我在运行时得到的错误是:
malloc: *** error for object 0x60800000c4f0: Invalid pointer dequeued from free list
*** set a breakpoint in malloc_error_break to debug
似乎malloc
失败,因为先前对free
的调用释放了无效的内容。但似乎free
当时会对此抱怨。
显然,有数百万个malloc/free
和new/delete
调用正在执行,同样的代码在iOS和OS X上运行的其他程序中运行没有问题。我不知道如何调试这个我正在寻找建议。
答案 0 :(得分:4)
我怀疑,问题与malloc
电话没有任何关系。在我处理另一个问题时,我决定忽略这个问题。该项目是我将之前使用C ++ for Windows编写的代码移动到Mac的项目。在更改某些类型名称时,我无意中改变了这一点:
TCHAR * p = new TCHAR[(length + 1)];
到此:
char * p = new char(length + 1);
所以只是一个错字,但其中一个意义重大。
我在查看最近对具有其他奇怪行为的文件所做的更改时发现了这一点。所以我原来问题的答案非常简单,适用于很多其他情况:"你最近有什么改变?" : - )
答案 1 :(得分:0)
可能它与你的情况没有关系,但是想分享一些棘手的错误我已经使用" malloc:从无效列表中出列的无效指针"错误。
对我来说,这是以下代码中的错误:
int *array = malloc(len+1 * sizeof(int));
由于我是C中的新手,我在这里错过了malloc(len+1 * sizeof(int))
错误地假设C运营商优先权。
显然必须是:
malloc((len+1) * sizeof(int))