Я работаю над 2D-массивом на C++. У меня возникают проблемы с подключением понятий массивов и указателей. Я знаю, что они связаны с распределением памяти и доступом к элементам. НапримерC++ - Инициализация 2D-массива с нотной меткой
int *arr;
int num = arr + 1*sizeof(int);
такая же, как
int arr[];
int num = arr[1];
Я пытаюсь найти такую же связь между 2D массивов и указателей Вот мой код
void printGrid(int **arr) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
cout << setw(3);
cout << arr[i][j] << " ";
}
cout << endl;
}
}
int main() {
int **grid;
srand(time(NULL));
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
grid[i][j] = rand() % 11;
}
}
printGrid(grid);
}
Когда я компилирую это, он компилируется. Когда я попытаюсь запустить его, я получаю segfault. Может ли кто-нибудь указать на ошибку в моем коде?
Благодаря SO
"int num = arr + 1 * sizeof (int);" это не то же самое, что и arr [1]. –
нет памяти, выделенной для ** сетки. Это всего лишь указатель. выделить место для него или установить его на определенный размер, например. malloc или объявить int grid [10] [10]; – user5976242
В вашем коде нет 2D-массива. У вас есть указатель на указатель, что совсем другое. – juanchopanza