Я уже некоторое время работаю над проектом, и я решил сделать прыжок в 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
звонком? Иногда он возвращает ноль, а иногда возвращает указатель, к которому у меня нет доступа.