Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамическое создание двумерного..

1.8K
19 июня 2003 года
shrize
46 / / 04.12.2002
Динамическое создание двумерного массива, не могу понять почему ругается Access Violation.
Вот код который создает все это

void CreateMatrix(unsigned int*** ptrMatrix, long Rows,long Colls)
{
*ptrMatrix=new unsigned int*[Rows];
for(long iRow=0;iRow!=Rows;iRow++)
{
*ptrMatrix[iRow]=new unsigned int[Colls];
}
}
3
19 июня 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by shrize
Динамическое создание двумерного массива, не могу понять почему ругается Access Violation.
Вот код который создает все это

void CreateMatrix(unsigned int*** ptrMatrix, long Rows,long Colls)
{
*ptrMatrix=new unsigned int*[Rows];
for(long iRow=0;iRow!=Rows;iRow++)
{
*ptrMatrix[iRow]=new unsigned int[Colls];
}
}



В языке C++ суфикс имеет больший приоритет, чем префикс. Т.о. в данном случае надо писать так:

(*ptrMatrix)[iRow]=new unsigned int[Colls];

Вопрос: а зачем вводиться аргумент ptrMatrix ? Мне кажется, что это совсем не нужно, а иногда опасно. IMHO так правильнее:

unsigned int** CreateMatrix(long Rows,long Colls)
{
unsigned int** ptrMatrix=new unsigned int*[Rows];
for(long iRow=0;iRow!=Rows;iRow++)
{
ptrMatrix[iRow]=new unsigned int[Colls];
}

return ptrMatrix;
}

А еще правильнее было бы создать соотв. класс.

1.8K
20 июня 2003 года
shrize
46 / / 04.12.2002
Спасибо за ответ.
Но я сделал по другому
typedef unsigned short** TMatrix;
void CreateMatrix(TMatrix& ptrMatrix, long& Rows,long& Colls)
{
ptrMatrix=new unsigned int*[Rows];
static long iRow=0;
for(iRow=0;iRow!=Rows;iRow++)
{
ptrMatrix[iRow]=new unsigned int[Colls];
fill(ptrMatrix[iRow],ptrMatrix[iRow]+Colls,0);
}
}
А насчет вашего варианта return ptrMatrix;
Въехать не могу в одно, почему указатель не уничтожается при выходе из функции, вроде при завершении блока все переменные объявленные в нем уничтожаются?
3
20 июня 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by shrize
А насчет вашего варианта return ptrMatrix;
Въехать не могу в одно, почему указатель не уничтожается при выходе из функции, вроде при завершении блока все переменные объявленные в нем уничтожаются?



Указатель уничтожается, но функция возвращает его значение, создав временный соотв. объект. Этот временный объект будет жить до конца строки, где эта функция вызывалась. Это в теории С++, на практике же всё ещё проше: при выходе из функции, значение указателя (обычно) помещается в EAX, а далее это значение используется вызывавшим функцию кодом. Не возникает же вопрос: почему не уничтожается результат

DWORD func()
{
DWORD res = 5;
return res;
}

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог