所以,我有这样的代码:为什么没有这个崩溃?
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;
}
显然,这个问题应该是第一次通过第二个for循环时最大== 16,我尝试访问表[MAX],但它编译运行良好。
这是来自iPad(最新软)应用程序,用Objective-C,XCode 4.6,Apple LLVM Compiler 4.2编写。
任何提示?
是的,你是对的,我意识到这一点,但当我访问数组超出范围时,我习惯了代码崩溃。你知道这个行为是否特定于Objective-C,iPad(内存管理?)还是编译器?坦率地说,我正在寻找一个更深入的答案,如果有可能:) – Losiowaty 2013-03-15 11:16:20
我认为OP是来自Java或类似的背景,其中outOfBound异常生成并崩溃。 – 2013-03-15 11:16:29
Losiowaty编译器根本没有做任何事情来解决这里的问题。我认为@AnoopVaidya是正确的,你的经验可能是在这种情况下,环境迫使崩溃的语言? Objective C基于C ...在某些方面它有点紧,但只要语法正确,C是一种语言,无论它有多么无效,都可以让你做很多事情。在你的情况下,写入表[16]可能会写入一个不重要的内存位置。它可能会写入_swap_,然后被覆盖。检查组件以确定。 – mah 2013-03-15 11:20:48