Двумеоные массивы в Builder-e
Не большой вопрос, а вернее всего проблема..
С двумерными массивами в С++ Builder-e,
Мне нужно создать динамический двуменрный массив.
Это делается на сколько Я знаю, следующем образом:
char **mas;
*mas=new (char * )[N]
for(int i=0;i<3;i++)
{
*(mas+i)=new char [3];
}
Компилится все норамально, а вот при исполнении
начинаются глюки в виде не моу прочитать по адресу и всякая разгная муть!!!!
ПОмогите плиз.....
Цитата:
Originally posted by vladsoft
Привет, Друзья!!!
Не большой вопрос, а вернее всего проблема..
С двумерными массивами в С++ Builder-e,
Мне нужно создать динамический двуменрный массив.
Это делается на сколько Я знаю, следующем образом:
char **mas;
*mas=new (char * )[N]
for(int i=0;i<3;i++)
{
*(mas+i)=new char [3];
}
Компилится все норамально, а вот при исполнении
начинаются глюки в виде не моу прочитать по адресу и всякая разгная муть!!!!
ПОмогите плиз.....
Привет, Друзья!!!
Не большой вопрос, а вернее всего проблема..
С двумерными массивами в С++ Builder-e,
Мне нужно создать динамический двуменрный массив.
Это делается на сколько Я знаю, следующем образом:
char **mas;
*mas=new (char * )[N]
for(int i=0;i<3;i++)
{
*(mas+i)=new char [3];
}
Компилится все норамально, а вот при исполнении
начинаются глюки в виде не моу прочитать по адресу и всякая разгная муть!!!!
ПОмогите плиз.....
По стандартам С++, двухмерные масивы в памяти создавать нельзя!
Цитата:
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
Если освоил предыдущий совет :) могу внести рацпредложение: память лучше выделять одним куском, поэтому предлагаю следующие варианты:
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
Глупость.
вот линк: