ARC и Malloc: EXEC_BAD_ACCESS

Я уже некоторое время работаю над проектом и решил перейти на ARC. Я сталкивался с каким-то кодом, который каждый раз ломался, и я хотел бы знать, почему. Мне удалось упростить это до следующего фрагмента:

typedef __strong id MYID;

int main(int argc, char *argv[])
{ 
    MYID *arr = (MYID *) malloc(sizeof(MYID) * 4);

    arr[0] = @"A";     // always get an EXEC_BAD ACCESS HERE
    arr[1] = @"Test";
    arr[2] = @"Array";
    arr[3] = @"For";

    // uh oh, we need more memory
    MYID *tmpArray = (MYID *) realloc(arr, sizeof(MYID) * 8);
    assert(tmpArray != NULL);

    arr = tmpArray;

    arr[4] = @"StackOverflow";  // in my actual project, the EXEC_BAD_ACCESS occurs here
    arr[5] = @"Is";
    arr[6] = @"This";
    arr[7] = @"Working?";

    for (int i = 0; i < 8; i++) {
        NSLog(@"%@", arr[i]);
    }

    return 0;
}

Я не совсем уверен, что здесь происходит, устал от этого в 4 разных проектах, и все они терпят неудачу. Что-то не так с моим вызовом malloc ? Иногда он возвращает null, а иногда возвращает указатель, к которому я не могу получить доступ.

5
задан Brad Larson 6 February 2012 в 17:44
поделиться