Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
unnamed
0 / 0 / 1
Регистрация: 10.05.2014
Сообщений: 4
#1

Ошибка при динамическом выделении двумерного массива char - C++

17.07.2014, 14:24. Просмотров 266. Ответов 2
Метки нет (Все метки)

Ребята, спасите-помогите. Нужно выделить двумерный массив типа char для игрового поля.
Выделяю вроде бы как положено, но получаю рантайм ошибку при запуске.
Уже больше двух часов парюсь с этим массивом, ума не приложу где может быть ошибка. Перепроверил всё десятки раз.

Код конструктора, в котором выделяется массив:

C++
1
2
3
4
5
6
7
8
9
10
11
12
GameField::GameField(size_t _sizeX, size_t _sizeY, char _markerP1, char _markerP2)
: mySizeX(_sizeX), mySizeY(_sizeY), markerP1(_markerP1), markerP2(_markerP2)
{
    char** myField = new char*[mySizeX];
    
    for (size_t x = 0; x < mySizeX; ++x)
    {
        myField[x] = new char[mySizeY + 1];
        for (size_t y = 0; y < mySizeY; ++y)
            myField[x][y] = ' ';
    }
}
Отладочный код в main:

C++
1
2
3
4
5
6
7
8
9
10
11
void main()
{
    GameField mainField(3, 3, 'X', 'O');
    char** fld = mainField.getField();
 
    for (int x = 0; x < 3; x++)
    for (int y = 0; y < 3; y++)
        std::cout << fld[x][y] << std::endl;
 
    system("pause");
}
Печально, что раньше как-то делал уже ведь такую штуку и всё нормально было, а тут хоть об стенку бейся. Уверен, ошибка глупая, но найти её что-то не получается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2014, 14:24
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка при динамическом выделении двумерного массива char (C++):

Ошибка при динамическом выделении памяти
почему у меня возникет ошибка вот тут struct TOVAR *New = new struct TOVAR;...

Ошибка при динамическом выделении памяти
Я не понимаю почему, но почему-то пример по динамическому выделению памяти,...

Ошибка на динамическом выделении памяти
программа ниже безупречно выполнялась под С++Builder 6.0 (консольное...

Создание исключения при динамическом выделении памяти
Вот код из учебника в нем мне все понятно. #include&lt;iostream&gt;...

Cin.getline() не работает при динамическом выделении памяти
Почему в таком коде cin.getline() работает не так как надо? Если очистить...

Выравнивание при динамическом выделении памяти под массив
Добрый вечер. Для того, чтобы выделить память под массив динамически и...

2
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,202
Завершенные тесты: 1
17.07.2014, 14:39 #2
Цитата Сообщение от unnamed Посмотреть сообщение
for (size_t y = 0; y < mySizeY; ++y)
myField[x][y] = ' ';
После этого добавляем терминальный нуль
C++
1
myField[x][mySizeY] = 0;
0
unnamed
0 / 0 / 1
Регистрация: 10.05.2014
Сообщений: 4
17.07.2014, 15:15  [ТС] #3
Тьфу, я ИДИОТ!!!
Спасибо за ответ, за нуль я действительно что-то забыл, но проблема оказалась в другом.
Я объявил в конструкторе ЛОКАЛЬНУЮ переменную вместо инициализации поля класса)))
И еще удивлялся, почему при выходе из конструктора в мэйне у объекта нужное мне поле имеет адрес 0х000000.
Пол дня убил на этот чёртов массив, а проблема-то действительно была в моей непроходимой криворукости.
Спасибо за помощь!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2014, 15:15
Привет! Вот еще темы с решениями:

Использование конструктора базового класса при динамическом выделении памяти
Есть базовый класс, от него наследуются несколько классов, свой конструктор я...

В чем отличие двумерного массива типа char от массива указателей на char?
В чем отличие двумерного массива типа char и массива указателей на char ?

При обращении к индексу двумерного массива char программа вылетает с ошибкой
Программа вылетает с ошибкой на 66й строке. Почему?((( // Task_1.cpp : Defines...

Вопрос о динамическом выделении памяти
Доброго времени суток всем. у меня вопрос к работе следующего кода: delete...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru