Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.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
Iphone 奇怪的EXC\u访问错误_Iphone_Objective C_Exc Bad Access - Fatal编程技术网

Iphone 奇怪的EXC\u访问错误

Iphone 奇怪的EXC\u访问错误,iphone,objective-c,exc-bad-access,Iphone,Objective C,Exc Bad Access,我的Objective-C代码中有一个for循环,它不断抛出一个EXC\u BAD\u访问错误。代码如下: double (*X)[2]; for (int bufferCount=0; bufferCount < audioBufferList.mNumberBuffers; bufferCount++) { SInt16* samples = (SInt16 *)audioBufferList.mBuffers[bufferCount].mData; for (int

我的Objective-C代码中有一个for循环,它不断抛出一个EXC\u BAD\u访问错误。代码如下:

double (*X)[2];

for (int bufferCount=0; bufferCount < audioBufferList.mNumberBuffers; bufferCount++) {
    SInt16* samples = (SInt16 *)audioBufferList.mBuffers[bufferCount].mData;
    for (int i=0; i < 1024; i+=2){//numSamplesInBuffer / 2; i+=2) {
        X[i][0] = samples[i];
        X[i][1] = samples[i + 1];

        NSLog(@"left: %f", X[i][0]);
        NSLog(@"right: %f", X[i][1]);
        NSLog(@"i: %d", i);
    }
}
double(*X)[2];
对于(int bufferCount=0;bufferCount
i=385
时,我在
NSLog(@“left:%f:,X[i][0]);
行获得
EXC\u BAD\u访问权限

考虑到X在本地声明可能是内存问题,我将X更改为一个属性,该属性在第一次通过时导致for循环的第一行出现
EXC\u BAD\u ACCESS

有人知道为什么会发生这种情况吗?

double X[512][2];
double X[512][2];

for (int bufferCount=0; bufferCount < audioBufferList.mNumberBuffers; bufferCount++) {
    SInt16* samples = (SInt16 *)audioBufferList.mBuffers[bufferCount].mData;
    for (int i=0; i < 512; i++) {
        int sample_offset = i * 2;
        X[i][0] = samples[sample_offset];
        X[i][1] = samples[sample_offset + 1];

        NSLog(@"left: %f", X[i][0]);
        NSLog(@"right: %f", X[i][1]);
        NSLog(@"i: %d", i);
    }
}
对于(int bufferCount=0;bufferCount
正如HotLicks指出的,问题在于我没有为数组分配任何空间。解决方案是如下初始化数组:

double (*X)[2] = malloc(2 * 1024 * sizeof(double));

我猜
X
不是你想象的那样。它是如何分配的?(事实上,再看看你的代码,我知道X不是你想象的那样。)不可否认,我在C方面并不出色,但我需要一个2维数组,所以我使用指针来创建它。编码器,你实际上在哪里分配数组???@jasoncoo我以前也尝试过,我在for循环的第一行获得了EXC_BAD_访问权限