Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потеря данных из массива, непонятный момент 
:(
    Опции темы
Sower
Дата 4.1.2012, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 31.7.2010

Репутация: нет
Всего: нет



Здравствуйте. Столкнулся с пока что непонятной проблемой, не могу найти ошибку в логике или это особенности с++. Здесь заполняется многомерный массив из файла, данные сразу выводятся на экран и они верны, но если после попробовать вывести содержимое массива map на экран, то оказывается, что он заполнен нулями. Укажите на ошибку, пожалуйста. Компилятор VC++ 2010 Express.

  
Код

      ifstream inf("d:\seeinp.txt");
    int width = 0, height = 0; //столбцы, строки
    int x = 0, y = 0;

    inf >> height >> width;
    int *map = new int[height, width, 2]; //выделяем память для карты
    
    bool start = false; //флаг поиска начальной точки 

    for (int i = 0; i < height; i++) {
        for (int p = 0; p < width; p++) {
            inf >> map[i,p,0];

            if (!start && (map[i,p,0] != SEE)) { //поиск начальной точки
                start = !start; //
                x = i;
                y = p;
            }

            cout << map[i,p,0] << " ";
        
        }

        cout << endl;
    } 
//.....
/*delete[] map в конце*/

PM MAIL   Вверх
Фантом
Дата 4.1.2012, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Вы уверены, что в C++ есть многомерные массивы? А то конструкции вроде
Цитата(Sower @  4.1.2012,  18:48 Найти цитируемый пост)
int *map = new int[height, width, 2]

Цитата(Sower @  4.1.2012,  18:48 Найти цитируемый пост)
map[i,p,0]

и т.п. имеют несколько другой смысл.

PM   Вверх
Sower
Дата 4.1.2012, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 31.7.2010

Репутация: нет
Всего: нет



Фантом, уже понял, что напортачил именно в этом, можете тогда объяснить на будущее, что означает такая конструкция?

Это сообщение отредактировал(а) Sower - 4.1.2012, 18:32
PM MAIL   Вверх
Фантом
Дата 4.1.2012, 19:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Цитата(Sower @  4.1.2012,  19:31 Найти цитируемый пост)
уже понял, что напортачил именно в этом, можете тогда объяснить на будущее, что означает такая конструкция?


Это сложный вопрос.  smile 

Начнем с того, что оператор-запятая - это оператор с низким приоритетом, объединяющий два выражения, в котором сначала вычисляется левое выражение, потом правое, и результат совпадает со значением правого выражения. Т.е. map[i,p,0] - это такой экзотический способ обращения к элементу map[0] (собственно, именно поэтому немедленный вывод и срабатывал - программа все время читала данные в один и тот же элемент массива, а потом его же и выводила). При желании использовать многомерный массив (или то его подобие, которое существует в C++)  к его элементам следует обращаться как map[i][p][0]. 

Далее. Написанная Вами конструкция с new создавала одномерный массив длины 2 (по вышеупомянутой причине). Трехмерный динамический массив - это указатель на последовательность указателей на последовательность указателей на последовательность элементов. Соответственно, одним new такое не соорудить, всю эту конструкцию надо последовательно создавать (и потом столь же последовательно уничтожать). Посмотрите примеры в сети, их очень легко найти.
PM   Вверх
Sower
Дата 5.1.2012, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 31.7.2010

Репутация: нет
Всего: нет



Спасибо  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.