Задать вопрос
@xfnxfn

Что так с моим кодом?

#include <iostream>

using namespace std;

void arrPrint(int** arr, const int size){
	for (int i = 0; i<size;++i){
		for (int j = 0;j<size;++j){
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}
}

int main(){
	srand(2);
	const int size = 2;
	int** arr = new int* [size];
	for (int i = 0; i<size;++i){
		arr[i] = new int [a];
		for (int j = 0;j<size;++j){
			arr[i][j] = rand() % 5;
			
		}
	}
	arrPrint(arr, size);
	delete[] arr;
}

Хочу передать двумерный массив в функцию
  • Вопрос задан
  • 401 просмотр
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@kaka888
C, C++, Qt, Python Flask, MySQL, Lua
Дык попробуйте скомпилировать свою программу и увидите следующую ошибку:
main.cpp: In function ‘int main()’:
main.cpp:19:35: error: ‘a’ was not declared in this scope
   19 |                 arr[i] = new int [a];
      |                                   ^

Здесь сказано, что переменная `a` не определена. Её и правда нигде в коде нет.

Память, выделенная для подмассивов внутри arr, не освобождается = утечка памяти. Вы же выполняете сначала один new, а потом в цикле выполняете ещё new для каждого подмассива. Освобождать память с помощью delete надо по такой же логике - сначала для подмассивов, а потом только для самого arr - delete[] arr.
Ответ написан
badcasedaily1
@badcasedaily1
data engineer, author habr
Несколько проблем:

  1. в цикле инициализации массива arr[i] = new int [a]; переменная a не определена, должно быть size.
  2. освобождение памяти для двумерного массива сделано неправильно. нужно удалить каждый подмассив, а затем сам массив.
  3. лучше использовать std::vector для динамических массивов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы