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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобратся с кодом, нада прокоментировать некоторие строки 
:(
    Опции темы
exitwound
Дата 15.6.2009, 23:46 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Для работи над курсовой о операциях с матрицами решил взять вот етот кусок кода из нета, но кое-что непонятно, даже с Гуглом и книгами, прокоментируйте пжлст хотяби виделенние строки.

Изменять уже поздно, осталось 2 дня до здачи, а практически каждая последующая функция программи опираеться на ЕТО.

З.І.: Єсли есть что-то по именно етому - дайте ссилку.

спс


double ** AllocMatrix(int Rows, int Colomns)
{
 double ** Matrix;
 try
 {
  Matrix = new double * [Rows];
  if( Matrix == NULL ) throw 0;
  for (int i = 0; i < Rows; i++)
  {
   Matrix[i] = new double [Colomns];
   if( Matrix[i] == NULL ) throw i;
  }
 }

    catch( int index )
    {        
        cout << "Ошибка выделения памяти" << endl;
  for (int i = 0; i < index; i++)
  {
   delete [] Matrix[i];
   Matrix[i] = NULL;
  }
  return NULL;
    }
 return Matrix;
}


PM MAIL   Вверх
586
Дата 16.6.2009, 00:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
double ** AllocMatrix(int Rows, int Colomns)   // выделение памяти под матрицу (двумерный массив)
{
 double ** Matrix;
 try
 {
  Matrix = new double * [Rows];     // выделение памяти под массив указателей на double
  if( Matrix == NULL ) throw 0;     // в случае неудачи вызывается исключение
  for (int i = 0; i < Rows; i++)
  {
   Matrix[i] = new double [Colomns];   // выделение памяти под переменные с строке i матрицы 
   if( Matrix[i] == NULL ) throw i;     // в случае неудачи вызывается исключение с номером строки матрицы, где возникла проблема
  }
 }
    catch( int index )    // обработка исключений
    {        
        cout << "Ошибка выделения памяти" << endl;
  for (int i = 0; i < index; i++)     // освобождение памяти
  {
   delete [] Matrix[i];                // освобождение памяти под строки матрицы
   Matrix[i] = NULL;      // обнуления указателя на строку матрицы (рекомендуется так делать)
  }
    if(Matrix)
    {
       delete []Matrix;         // освобождение памяти под указатели
       Matrix = NULL;
    }
   }
 return Matrix;
}


Это сообщение отредактировал(а) 586 - 16.6.2009, 00:30
PM   Вверх
exitwound
Дата 16.6.2009, 00:11 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ОО спасибо, а можне чуть подробний о блоке try,catch, и для чего "две звездоки"(
Код

double ** AllocMatrix(int Rows, int Colomns
)) в оглавлении функции
PM MAIL   Вверх
Cheloveck
Дата 16.6.2009, 00:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



Цитата(exitwound @  16.6.2009,  01:11 Найти цитируемый пост)
ОО спасибо, а можне чуть подробний о блоке try,catch, и для чего "две звездоки"(

Не в оглавлении, а в определении. Возвращает указатель на указатель на значение типа double


--------------------
user posted image
PM Jabber   Вверх
586
Дата 16.6.2009, 00:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



"Две звёздочки" - это указатель на указатель. Указатель - это переменная такая, которая указывает на другую переменную (а может и не указывать ни на какую переменную, например, где возвращается NULL).

В строке 7 вызывается catch 0. При вызове исключения, цикл for в блоке catch задействован не будет.
В строке 11 вызываетя catch i. При вызове исключния, цикл for в блоке catch будет очищать уже выделенную память.
Блок catch вызывается только в случае, если возникли проблемы с выделением памяти.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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