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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объяв.,использование 2-ного массива и его удаление 
:(
    Опции темы
becks
Дата 19.12.2011, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добрый день! Подскажите, пожалуйста, по такому вопросу.

Есть двумерный массив NxN, и допустим я хочу считать в него данные из файла функцией вида:
Код

int GetMatrix (const char* File,  int **&mv)


Правильно ли я делаю?

Код

int main(int argc, char *argv[])
{
    ..........
    int **mv;
    GetMatrix( FileName, mv);
    ..........
    for (int i=0; i<n; i++)
        delete [] mv[i];
    delete [] mv;
}


или надо так:

Код

int main(int argc, char *argv[])
{
    ..........
    int **mv = new int* [n];
    for( int i=0; i<n; row++ )
        mv[i] = new int [n];
   GetMatrix( FileName, mv);
    ..........
    for (int i=0; i<n; i++)
        delete [] mv[i];
    delete [] mv;
}


Подскажите, пожалуйста, как и где (в main или в функции GetMatrix ) объявлять, инициализировать и удалять динамический массив.
Большое спасибо
PM MAIL   Вверх
borisbn
Дата 19.12.2011, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



ИМХО, это - почти что холивор. Кому-то нравится 1-й вариант, кому-то - второй...
Мне лично нравится, чтобы память выделялась и удалялась (как бы это сказать...) на одном уровне (т.е. второй вариант).
Хотя, если кол-во строк и столбцов известно только при чтении файла, то логичнее бы выглядел первый вариант, но тогда ф-ция GetMatrix должна сообщать о кол-ве строк в массиве.

И ещё: для двойных массивов лучше использовать линейную память и обращаться к ней так
Код
mv[ row * colCount + col ]

А ещё лучше использовать std::vector.

Это сообщение отредактировал(а) borisbn - 19.12.2011, 12:45


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
newbee
Дата 19.12.2011, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


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

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



Прально выше говорят, память выделять и удалять нужно на одно уровне. Или:

Код

int...mv=getMatrix(filename);
deleteMatrix(mv);


или

Код

int ..mv=alloc_mem;
fillMatrix(filename,mv);
delete mv;


В твоем случае первый вариант скорее всего предпочтительнее, потому что в общем случае ты не будешь знать размеры матрицы, а передашь их в вызывающий код из getMatrix через дополнительные аргументы.


--------------------
You're face to face
With man who sold the world
PM   Вверх
bsa
Дата 19.12.2011, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Чтобы были "и волки целы, и овцы сыты", достаточно сделать класс Matrix, который сам будет управлять памятью. Это значительно упростит код и повысит его надежность.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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