Почему массив заполнился буквой H?

#include <iostream>;
#include <conio.h>;
#include <ctime>;

using namespace std;


int main() {
	setlocale(0, "");
	
	char **arr = new char*[10];

	for (int i = 0; i < 10; i++) {
		arr[i] = new char[10];
	}

	arr[0][1] = 'K';
	arr[0][2] = 'L';

	for (int i = 0; i < 10; i++) {
		for (int z = 0; z < 10; z++) {
			cout << arr[i][z] << endl;
		}
	}

	system("pause");
	return 0;
}

fe7be62c95a44efb942911974454203a.png
  • Вопрос задан
  • 452 просмотра
Пригласить эксперта
Ответы на вопрос 2
Память не инициализирована, поэтому там мусор. Что именно -- Unspecified Behavior.
Ответ написан
@Alexander1705
Вообще это довольно странно, никакого unspecified behavior происходить не должно, так как выражение new вызывает конструктор по умолчанию для каждого объекта, то есть встроенные типы должны быть инициализированы нулём.

Попробуйте вывести не символ, а его код, заменив одну строчку на:
cout << static_cast<int>(arr[i][z]) << endl;

P. S. Несколько советов по коду. Во-первых, после директив препроцессора не нужно ставить точку с запятой:
#include <iostream>
Во-вторых, endl не только переводит на новую строку, но и сбрасывает накопленный буфер, то есть сразу выводит всё на экран или в файл. Если у вас много вывода, это может очень серьёзно замедлить вашу программу. Для простого перевода строки выводите специальный управляющий символ '\n'

Если выводите матрицу (двумерный массив), удобнее делать это так:
for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
        cout << arr[i][j] << ' '; // пробел можно убрать
    }
    cout << '\n';
}


Так же никогда не нужно использовать функцию system. Она приостанавливает вашу программу, и запускает другую (в данном случае pause). Такой вариант не только не оптимальный, но ещё и платформозависимый. Людям, которые используют mac или linux придётся вносить изменения в ваш код, чтоб запустить его, так как в этих ОС нет команды pause. Используйте для этого средства языка C++: cin.get();

И ещё никогда не используйте заголовочный файл conio.h. Он не является частью стандарта языков C или C++, и не поддерживается большинством компиляторов.

P. P. S. Какой компилятор вы используете? Какой он версии? Какие ключи компиляции или настройки проекта в IDE?
Ответ написан
Ваш ответ на вопрос

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

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