Free не обнуляет адрес памяти в указателе, он просто делает его недействительным. Таким образом, если вы выполняете этот цикл более одного раза, вы получите исключения при попытке освободить память, которая уже была признана недействительной. Вы можете использовать NSPointerArray или обернуть ваши целые числа в объектах и использовать NSMutableArray для своих целей, но если вы просто хотите использовать то, что у вас есть, и вы запускаете цикл более одного раза, вам придется сделать что-то вроде: 1001 *
int **multi;
multi = calloc(10, sizeof(int*));
multi[5] = calloc(20, sizeof(int));
//
multi[5][11] = 66;
//
for( int i = 0; i < 10; i++ ) {
if( multi[i] ) {
free(multi[i]);
multi[i] = NULL;
}
}
//
free(multi);
Таким образом, если цикл запускается более одного раза, вы не ошибетесь. Кроме того, я использую calloc вместо malloc, потому что он установит все указатели в NULL и целые в 0. Первый параметр - это размер массива, который вы хотите (в вашем случае), а второй параметр - размер типа (так что умножение не требуется).