странный EXC_BAD_ACCESS - PullRequest
       4

странный EXC_BAD_ACCESS

0 голосов
/ 27 декабря 2011

В моем коде Objective-C есть цикл for, который продолжает выдавать ошибку EXC_BAD_ACCESS.Вот код:

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);
    }
}

Когда i = 385, я получаю EXC_BAD_ACCESS в строке NSLog(@"left: %f:", X[i][0]);.

Думая, что это может быть памятьпроблема с X , объявленным локально, я изменил X на свойство, которое вызвало EXC_BAD_ACCESS в первой строке цикла for в первый раз через.

Кто-нибудь знает, почему это может происходить?

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011
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);
    }
}
0 голосов
/ 28 декабря 2011

Как указал HotLicks, проблема заключалась в том, что я не выделил место для массива.Решением было инициализировать массив следующим образом:

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