массивы — ошибка шины C ++ во время арифметики указателя

Я пытаюсь выучить 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;
}

Скриншот ошибки:
Скриншот ошибки

1

Решение

Строка 8 увеличивает i вместо j:

for(j=0; j<3; i++)
5

Другие решения

for(j=0; j<3; i++)

увеличивает i, а не j, поэтому внутренний цикл никогда не заканчивается.

3

По вопросам рекламы [email protected]