Я пытаюсь выучить C ++, особенно. указатели и их арифметика. Я использую XCode для компиляции и запуска своих программ.
Ниже у меня есть два набора кода, которые пытаются создать трехмерный массив целых чисел. Первый код компилируется и запускается без ошибок, но второй компилируется без ошибок, но при запуске генерирует EXC_BAD_ACCESS.
Второй код генерирует Bus Error: 10
когда я пытаюсь скомпилировать и запустить из терминала, используя g ++.
Может кто-нибудь сказать мне, почему второй набор кода не работает успешно, хотя для меня это выглядит очень похоже?
КОД 1: Компиляция + Запуск успешно
int main(){
int i, j, k;
int*** dim = new int**[3];
for (i=0; i<3; i++) {
dim[i] = new int* [3];
for(j = 0; j < 3; j++) {
*(*(dim+i)+j) = new int[3];
}
}
return 0;
}
КОД 2: Компиляция успешно, но генерирует EXC_BAD_ACCESS/Bus Error: 10
когда беги
int main(){
int i, j, k;
int*** dim = new int**[3];
for (i=0; i<3; i++) {
dim[i] = new int* [3];
}
for (i=0; i<3; i++) {
for(j=0; j<3; i++)
*(*(dim+i)+j) = new int[3];
}
return 0;
}
Строка 8 увеличивает i вместо j:
for(j=0; j<3; i++)
for(j=0; j<3; i++)
увеличивает i, а не j, поэтому внутренний цикл никогда не заканчивается.