Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Робота с двумерым массивом


Автор: Sharkfire 30.11.2006, 14:23
Здрасте!
Функция создаёт двумерный массив map размерами fWidth на fHeight и заполняет его символом f.

Вот код:
Код

//---------------------------------------------------------------------------
bool __fastcall TForm1::NewMap(int rWidth,int rHeight,short f)
{
fWidth  = rWidth;
fHeight = rHeight;

try
   {

map=(char**)  malloc((fHeight)*sizeof(char));
for(int y=1;y<fHeight;y++)
map[y]=(char*) malloc((fWidth)*sizeof(char));

    }
catch(Exception &e)
{ShowMessage("Error creating map: "+e.Message);return 0;}


for(int y=0;y<fHeight;y++)
{
 tmp=map[y];
  for(int x=0; x<fWidth; x++, tmp++)
 *tmp=f;
}

return 1;
}
//---------------------------------------------------------------------------


Вылазиет ошибка, при создании причём разные... что самое странное и когда закрываю приложение тоже "Invalid pointer operation" что делать!!! Что я делаю не так!! 
 smile  smile  smile  smile 

Автор: Partizan 30.11.2006, 14:30
во-первых....ИНДЕКСАЦИЯ В МАССИВАХ НАЧИНАЕТСЯ С 0 А НЕ С 1....
поуему у тебя:
Код

for(int y=1;y<fHeight;y++)
map[y]=(char*) malloc((fWidth)*sizeof(char));


а во вторых...мой тебе совет....если у тебя не требуется динамически поменять размеры массива без потери предыдущих значений с помощью realloc, то лучше уж пользуй C++  style в лице new и delete....
тогда твой код преобразуется в слежуцющий:

Код

//---------------------------------------------------------------------------
bool __fastcall TForm1::NewMap(int rWidth,int rHeight,short f)
{
fWidth  = rWidth;
fHeight = rHeight;

char **map;

try
   {

map=new char *[fHeight];
for(int y=1;y<fHeight;y++)
map[y]=new char[fWidth]; 

    }
catch(Exception &e)
{ShowMessage("Error creating map: "+e.Message);return 0;}

return 1;
}
//--------------------------------------------------------------------------- 
 

Автор: Sharkfire 30.11.2006, 15:01
Точно!! огромное спасибо!! Надо сразу допереть )))  smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)