странно EXC_BAD_ACCESS

У меня есть цикл for в моем коде Objective-C, который постоянно выдает ошибку 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 в первый раз.

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


person coder    schedule 27.12.2011    source источник
comment
Я предполагаю, что X не то, что вы думаете. Как распределяется?   -  person Hot Licks    schedule 27.12.2011
comment
(На самом деле, снова взглянув на ваш код, я знаю, что X — это не то, что вы думаете.)   -  person Hot Licks    schedule 27.12.2011
comment
По общему признанию, я не силен в C, но мне нужен 2-мерный массив, поэтому я использую указатель для его создания.   -  person coder    schedule 27.12.2011
comment
Кодер, где вы на самом деле выделяете массив??   -  person Hot Licks    schedule 27.12.2011
comment
@JasonCoco Я пробовал это и раньше, и я получаю EXC_BAD_ACCESS в первой строке цикла for   -  person coder    schedule 27.12.2011
comment
@HotLicks Вы были правы, я не выделял место для массива.   -  person coder    schedule 27.12.2011
comment
@HotLicks Если вы хотите поместить это в ответ, я могу принять это ...   -  person coder    schedule 27.12.2011
comment
@coder Даже если вы выделяете пространство, ваш цикл также неверен, так как половина пространства будет потрачена впустую, поскольку вы будете хранить только каждый другой элемент.   -  person Jason Coco    schedule 28.12.2011


Ответы (1)


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

double (*X)[2] = malloc(2 * 1024 * sizeof(double));
person coder    schedule 28.12.2011