Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 64位内置OSX-不一致的malloc错误_Xcode_Macos_64 Bit_Malloc_32bit 64bit - Fatal编程技术网

Xcode 64位内置OSX-不一致的malloc错误

Xcode 64位内置OSX-不一致的malloc错误,xcode,macos,64-bit,malloc,32bit-64bit,Xcode,Macos,64 Bit,Malloc,32bit 64bit,我在Xcode中遇到了一个非常不一致的错误: malloc: *** error for object 0x1041146f8: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug 我知道这不是我的代码,因为32位构建工作得很好(架构设置为标准32/64,仅构建活动架构设置

我在Xcode中遇到了一个非常不一致的错误:

malloc: *** error for object 0x1041146f8: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug
我知道这不是我的代码,因为32位构建工作得很好(架构设置为标准32/64,仅构建活动架构设置为否)。它偶尔也会工作得很好,我甚至不会更改评论,但只有大约10%的时间

我使用断点跟踪错误,有时它发生在一个ivar上,比如:myClass=new myClass,但有时它发生在删除一个不相关的ivar上。在创建新实例之前,我曾尝试将myClass设置为null,但没有任何帮助,我不知所措,因为我不完全了解缓存、寄存器、堆和堆栈(这可能会让我了解为什么会发生这种情况)

下面是我得到错误的地方的一些代码。请注意,每一组代码行都是不同的位置和类,在这里可能发生错误,也可能不发生错误

错误1

void functionA() {
    // bunch of unrelated code
    if (aAinterpFilter)
        delete aAinterpFilter;

    // this is where the first error sometimes happens
    aAinterpFilter = new InterpFilter((Window::Sinc::LP*)filterDesign, aAinterpFactor);
}
错误2

Window::Sinc::LP::~LP ()
{
    // the z delete is where the error sometimes happens
    delete[] z;
    delete[] kernel;
}
错误3

void AAOsc :: setPhase(double phase) {
    if (phase < 0.0) phase = 0.0;
    if (phase > 1.0) phase = 1.0;

    // this is where the error rarely happens, but it does sometimes.
    osc->tickInfo->curvPhase = static_cast<uint>(phase * 4294967296.0);
}
void AAOsc::设置相位(双相位){
如果(相位<0.0)相位=0.0;
如果(相位>1.0)相位=1.0;
//这是错误很少发生的地方,但有时会发生。
osc->tickInfo->curvephase=静态施法(阶段*4294967296.0);
}
任何可能指向解决方案的想法都将不胜感激


GW

您需要在建议的函数
malloc\u error\u break()
上添加断点。运行应用程序并让调试器在该函数上中断。后退一两个堆栈帧,您将看到操作系统认为已释放的、您已修改的变量。然后,您需要找出该变量之前可能已被释放的位置


如果您有一个内存块,您对该内存块进行了
malloc
ed,然后对其进行了写入,并且意外地在
malloc
返回的指针之前写入了几个字节,则也可能发生这种情况。您可以通过打开并使其再次发生来捕捉到这一点。

我会的,但代码太复杂,可能会使它更加混乱。如果你认为有必要的话我可以,尽管我们发现了问题。我们在z变量上使用memset,该变量在32位中工作正常,但它清除了错误大小的内存块,并损坏了64位块。