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