Итак, у меня есть этот код:Почему это не произошло?
int randomNumber;
int max = 16;
int swap;
int table[16];
srand(time(NULL));
for (int i = 0; i < 16; ++i)
table[i] = i + 1;
for (int i = 0; i < 16; ++i) {
randomNumber = rand() % max;
swap = table[max];
table[max] = tablica_losowa[losuj];
table[losuj] = swap;
--max;
}
Очевидно, что эта проблема должна быть в первом проходе через секунду-цикл, когда макс == 16 и я пытаюсь получить доступ к таблице [макс], но он составлен и работает нормально.
Это приложение iPad (новейшее программное обеспечение), написанное на Objective-C, XCode 4.6, Apple LLVM Compiler 4.2.
Любые подсказки?
Да, вы правы, и я знаю об этом, но я привык к сбою кода при доступе к массивам вне диапазона. Вы знаете, является ли это поведение конкретным для Objective-C, iPad (управление памятью?) Или, может быть, компилятором? Честно говоря, я ищу более подробный ответ, если это возможно :) – Losiowaty
Я думаю, что OP из Java или подобного фона, где outOfBound Exceptions генерируются и разбиваются. –
Losiowaty компилятор просто ничего не делает для _cause_ проблемы здесь. Я думаю, @AnoopVaidya правильно, что ваш опыт может быть с языком, где окружающая среда приводит к крушению в этом случае? Объектив C основан на C ... он немного тугое в некоторых отношениях, но C - это язык, который позволит вам _try_ делать много вещей независимо от того, насколько они недопустимы, если синтаксис верен. В вашем случае запись в таблицу [16] может быть записана в ячейку памяти, которая не важна. Это _might_ следует записывать в _swap_, который затем перезаписывается. Проверьте сборку, чтобы убедиться. – mah