откуда в массиве char берётся мусор, превышающий размер массива?

мне нужно было прочитать 2D массив char из файла. всё работает, но при выводе массива появляется очень много мусора. я в курсе про ноль в конце строки, но если его нет, то будет прочитан весь массив. я выделяю по 5*5 байт. откуда здесь берётся столько мусора?

файл:

5 5
*****
** **
*****
*****
*****

вывод:

5 5

*****¤¤¤¤║|g
** **¤¤¤¤
*****¤¤¤¤▌
*****¤¤¤¤
*****¤¤¤¤

код:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
char** Map;
string str;
int x = 0, y = 0;
int main() {
    ifstream f;
    f.open("maps\\map.txt");
    f >> x;
    f >> y;

    getline(f, str); // перевод на следующую строку

    cout << x << " " << y << "\n";
    
    Map = new char* [y];
    for (int i = 0; i < y; i++) {
        Map[i] = new char[x];
        getline(f, str);
        str.copy(Map[i], x);
    }
    f.close();

    cout << '\n';
    for (int i = 0; i < y; i++)
        cout << Map[i] << '\n';

    return 0;
}

Ответы (0 шт):