Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив не расширяется, запутался.... Помогите! 
V
    Опции темы
darkness
Дата 24.12.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

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



Изначально имеем следующую струтуру:
Код

struct FIG
{
  int X1, Y1, type;
 };


Ну и указатель на массив таких данных:
Код

FIG *mas[2];


А вот код:
Код

int count=0;
...........
............
..........
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 mas[count]=new FIG;
 mas[count]->X1=135;
 mas[count]->Y1=40;
 mas[count]->type=1;

 count++;
// âàï
if (count>=2)
 {
 FIG *ptr=new FIG[count+1];    // выделяю блок памяти размером с на один FIG больше чем count
      for (i=0; i<count; i++)
       {
         *(ptr+i)=*mas[i];              
       }
       for (i=0; i<count; i++)
       {
         delete[]mas[i];                    // так как уже слили значение mas[i] в ptr то от лишние можно и избавиться
       }
    mas=ptr;
    delete[]ptr;       // теперь просто mas присваиваем значение указателя на массив 
//с длиной на 1 больше чем mas предыдущий....


 }
}


Народ!!! Разъясните где ошибаюсь!!!!

Это сообщение отредактировал(а) darkness - 24.12.2006, 23:09
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
codelord
Дата 24.12.2006, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

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



ты бы написал в чем ошибка. или как ?


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
darkness
Дата 24.12.2006, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

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



codelord,  ругается на 
строку:
Код

mas=ptr;


 Lvalue required


--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
codelord
Дата 25.12.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

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



Цитата(darkness @  24.12.2006,  19:08 Найти цитируемый пост)
    mas=ptr;    delete[]ptr;  

можешь приравнять как *mas=ptr, 
только зачем если ты все нафиг удаляешь в конце. 
что то мне не очень понятно. Объясни смысл всего что ты делаешь. мне кажется 
что-то не так. 



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
zkv
Дата 25.12.2006, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(darkness @  24.12.2006,  23:08 Найти цитируемый пост)
FIG *mas[2];


Цитата(darkness @  24.12.2006,  23:08 Найти цитируемый пост)

Народ!!! Разъясните где ошибаюсь!!!!


Цитата(darkness @  24.12.2006,  23:46 Найти цитируемый пост)
mas=ptr;

 в данном случае mas это константный указатель на начало массива FIG *[2], естественно компилятору не нравится, что ему пытаются что то присвоить.
вообще, код немного непонятный smile
PM MAIL   Вверх
darkness
Дата 25.12.2006, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

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



codelord, при нажатии n-ый раз на кнопку  в n-ый элемент массива mas  запиываются несколько интовских значений ...
Но если мы в размер, тот который мы выделили для массива, уже не вписываемся, следовательно его надо расширить.... чтобы программа продолжала корректно работать...

Это сообщение отредактировал(а) darkness - 25.12.2006, 00:31
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
zkv
Дата 25.12.2006, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



чисто интуитивно полагаю, что вы хотели получить нечто такое:
Код

struct FIG
{
  int X1, Y1, type;
 };


FIG *mas = new FIG[2];

int count=0;
...........
............
..........
void __fastcall TForm1::Button2Click(TObject *Sender)
{
mas[count].X1=135;
 mas[count].Y1=40;
 mas[count].type=1;
 count++;
// âàï
 if (count>=2)
 {
  FIG *ptr=new FIG[count+1];    // выделяю блок памяти размером с на один FIG больше чем count
  for (i=0; i<count; i++)
  {
   ptr[i] = mas[i];              
  }
  delete[]mas;                    // так как уже слили значение mas[i] в ptr то от лишние можно и избавиться
      
  mas=ptr;
 }
}


PM MAIL   Вверх
darkness
Дата 25.12.2006, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

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



zkv, Вы совершенно правы. Но предложенный Вами  вариант у меня тоже был...
На это он ругается на строки:

Код

ptr[i] = mas[i]; 


[C++ Error] Unit1.cpp(270): E2034 Cannot convert 'FIG *' to 'FIG'

и:
Код

 mas=ptr;


[C++ Error] Unit1.cpp(274): E2277 Lvalue required
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
zkv
Дата 25.12.2006, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(darkness @  25.12.2006,  00:49 Найти цитируемый пост)
zkv, Вы совершенно правы. Но предложенный Вами  вариант у меня тоже был...

а вот и неправда smile, посмотрите внимательно на мое объявление mas  smile 
PM MAIL   Вверх
darkness
Дата 25.12.2006, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

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



zkv, да действительно!!! smile   Вы совершенно правы!
Только в процессе компиляции у меня он начал ругаться на следующие обращения к элементам струтуры  mas[count]->X1 заменил на 
mas[count].X1  -  согласился.... Можно немного уточнить эту тонкость, если несложно...
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
zkv
Дата 25.12.2006, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(darkness @  25.12.2006,  01:10 Найти цитируемый пост)
mas[count].X1
 а я вроде так и писал


Цитата(darkness @  25.12.2006,  01:10 Найти цитируемый пост)
Можно немного уточнить эту тонкость, если несложно... 


следующими строками
Цитата(darkness @  24.12.2006,  23:08 Найти цитируемый пост)
struct FIG
{
  int X1, Y1, type;
 };


Цитата(darkness @  24.12.2006,  23:08 Найти цитируемый пост)
    
FIG *mas[2];

вы говорите, что хотите разместить в стеке массив указателей на FIG (смешно звучит smile ) в размере 2 элементов, в таком случае запись вида: mas[i] представляет из себя указатель на FIG, а для доступа к членам-данным класса через указатель служит, как известно, operator->. В случае, если мы объявляем FIG* mas, запись вида mas[i] (эквивалентно *(mas+i) ) - это уже не указатель, а, собственно объект класса, для доступа к мемберам юзаем точку. Вообще то тема слишком обширная -  читайте книжки smile, или тут почитайте -  указатели и т.д. , а в вашем конкретном случае было бы удобней использовать, к примеру, std::vector (#include <vector> в Visual C++, в Борланде не знаю как)  

Это сообщение отредактировал(а) zkv - 25.12.2006, 01:28
PM MAIL   Вверх
darkness
Дата 25.12.2006, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

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



zkv, Огромное Спасибо!!!  smile 
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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