mrjbom
@mrjbom

Не получается объявить двухмерный динамический массив?

На вход даётся булевый двухмерный массив. Мне нужно масштабировать его. Я пытаюсь создать новый динамический массив который будет в 2 раза больше, но у меня не получается. Код компилируется с такими варнингами:
5d39d9e10b62b618384659.png
После запуска, идёт вывод кучи больших чисел(из не принадлежащей мне памяти) и следственно происходит краш.

Есть такой код:
#include <iostream>
#include <math.h>

using namespace std;

bool map[3][3] = {
	1, 1, 1,
	0, 1, 0,
	0, 1, 0
};

template<std::size_t U, std::size_t V>
void scaleMap(bool (&map)[U][V], int coefficient)
{
	uint32_t size = sizeof(map) / sizeof(bool);
	int arrayLineAndColumnSize = (int)sqrt(size);
	int newMapLineAndColumnSize = sqrt(arrayLineAndColumnSize * coefficient);
	bool** newMap = (bool**)malloc(newMapLineAndColumnSize * sizeof(bool*));
	for (int i = 0; i < newMapLineAndColumnSize; i++)
		newMap[i] = (bool*)malloc(newMapLineAndColumnSize * sizeof(bool));
	int tmpCounter = 0;
	for (int j = 0; j < arrayLineAndColumnSize; ++j)
	{
		for (int i = 0; i < arrayLineAndColumnSize; ++i)
		{
			for (int n = 0; n < coefficient; ++n)
			{
				newMap[j][n + tmpCounter] = map[j][i];
			}
			tmpCounter++;
		}
		tmpCounter = 0;
	}
	for (int j = 0; j < arrayLineAndColumnSize * coefficient; ++j)
	{
		for (int i = 0; i < arrayLineAndColumnSize * coefficient; ++i)
			cout << newMap[j][i];
		cout << endl;
	}
	//delete [] newMap;
}
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 2
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Вы или тег "C++" уберите, или C++ используйте, а не C.
using Map = std::vector<std::vector<char>>;
Map map = {
   {1, 1, 1},
   {0, 1, 0},
   {0, 1, 0},
};

// ...
void scaleMap(Map &map, int coefficient)
{
   // ...
   Map newMap(newSize, std::vector<char>(newSize));
   // ...
   map.swap(newMap);
}

Всё просто, быстро и безопасно. Главное за границы массива не выходите.
Ответ написан
@lorc
int newMapLineAndColumnSize = sqrt(arrayLineAndColumnSize * coefficient);

Тут точно sqrt() нужен? Мне кажется, что без него будет лучше.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы