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

Ваш аккаунт

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

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

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

Двумеоные массивы в Builder-e

272
20 марта 2003 года
vladsoft
512 / / 20.08.2000
Привет, Друзья!!!
Не большой вопрос, а вернее всего проблема..
С двумерными массивами в С++ Builder-e,
Мне нужно создать динамический двуменрный массив.
Это делается на сколько Я знаю, следующем образом:
char **mas;

*mas=new (char * )[N]
for(int i=0;i<3;i++)
{
*(mas+i)=new char [3];

}
Компилится все норамально, а вот при исполнении
начинаются глюки в виде не моу прочитать по адресу и всякая разгная муть!!!!
ПОмогите плиз.....
305
20 марта 2003 года
Kashuk
385 / / 21.02.2003
Цитата:
Originally posted by vladsoft
Привет, Друзья!!!
Не большой вопрос, а вернее всего проблема..
С двумерными массивами в С++ Builder-e,
Мне нужно создать динамический двуменрный массив.
Это делается на сколько Я знаю, следующем образом:
char **mas;

*mas=new (char * )[N]
for(int i=0;i<3;i++)
{
*(mas+i)=new char [3];

}
Компилится все норамально, а вот при исполнении
начинаются глюки в виде не моу прочитать по адресу и всякая разгная муть!!!!
ПОмогите плиз.....



По стандартам С++, двухмерные масивы в памяти создавать нельзя!

3
20 марта 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Kashuk


По стандартам С++, двухмерные масивы в памяти создавать нельзя!



А можно уточнить контретный пункт в стандарте?

To vladsoft:
Правильнее будет сделать так:

char* *mas = new (char*)[N]
for(int i=0; i<N; i++)
{
mas=new char [3];
}

А вообще-то при небольших массивах проще будет сделать так:

char mas[N][3];

А при больших, лучше использовать map Class

2.0K
21 марта 2003 года
segev
67 / / 19.01.2003
vladsoft
Если освоил предыдущий совет :) могу внести рацпредложение: память лучше выделять одним куском, поэтому предлагаю следующие варианты:
1. Если представляешь что такое ООП, можно написать небольшой класс-структуру данных. В конструкторе выделяешь память:
pdata = new char [height*width];
и определяешь метод доступа через оператор индексирования или просто через обычную функцию
char getItem(int x, int y)
{ return pdata[y*width + x]; };

2.
Выделение:
char *ptr = new char[N*3];
char **pdata = new (char*) [N];
for (int i = 0; i < 3; ++i) pdata = ptr + 3*i;
доступ:
pdata[j];
освобождение:
delete [] pdata;
delete [] ptr;

Kashuk
Глупость.
295
21 марта 2003 года
gray_k
356 / / 20.12.1999
вот линк:
http://forum.vingrad.ru/index.php?act=ST&f=31&t=3633
Там всё классно расписано
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог