Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Порядок объявления переменных 
:(
    Опции темы
AntonChik
Дата 6.10.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



извиняюсь если спрашиваю какую-то глупость (убейте, поиском не воспользовался), но вот стало интересно почему если в рабочем коде :
Код

 TButton **b;
 int z;
 int n=10;

 for (z=0;z<n;z++)
  {
   b[z] = new TButton(Application);
   b[z]->Parent = Form1;
   b[z]->Visible=true;
  }


объявить  **b после z и n, т.е. вот так

Код

 int z;
 int n=10;
 TButton **b;

 for (z=0;z<n;z++)
  {
   b[z] = new TButton(Application);
   b[z]->Parent = Form1;
   b[z]->Visible=true;
  }

то в строке 
Код

   b[z] = new TButton(Application);

вылетает access violation ???!

--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
volvo877
Дата 6.10.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 13
Всего: 116



Цитата(AntonChik @  6.10.2007,  13:05 Найти цитируемый пост)
в рабочем коде

Ты считаешь, что он действительно рабочий? А память, прости, под массив b, ты где выделяешь?
PM MAIL   Вверх
AntonChik
Дата 6.10.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(volvo877 @ 6.10.2007,  14:18)
Ты считаешь, что он действительно рабочий? 

я не считаю, я поимел смелость лично в этом убедиться, продемонстрировав себе успешную компиляцию, запуск приложения и произведя действия, ведущие к вызову данного кода...

а вот память под очередной элемент массива b я выделаю вот здесь:
Код

b[z] = new TButton(Application);

или здесь происходит нечто другое?)))
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
Alexeis
Дата 6.10.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



TButton **b;
это указатель на указатель, т.е. сначала нужно выделить память под массив указателей, а затем уж под каждый объект.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
AntonChik
Дата 6.10.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ок. знаю и верю. почему тогда работает первый код? кнопочки успешно создаются и даже щелкаются(!) smile

Это сообщение отредактировал(а) AntonChik - 6.10.2007, 15:10
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
zkv
Дата 6.10.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Код

TButton **b;
 int n=10;
b = new TButton *[n];
 int z;
 for (z=0;z<n;z++)
  {
   b[z] = new TButton(Application);
   b[z]->Parent = Form1;
   b[z]->Visible=true;
  }


Цитата(AntonChik @  6.10.2007,  15:09 Найти цитируемый пост)
почему тогда работает первый код

не должен работать. Либо не все показал, либо это упущение Билдера, если он такие ошибки пропускает.
PM MAIL   Вверх
Alexeis
Дата 6.10.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



zkv, если переменная неинециализирована, то там может быть допустимый адрес где-то в выделенной памяти.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
zkv
Дата 6.10.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Alexeis @  6.10.2007,  15:21 Найти цитируемый пост)
если переменная неинециализирована, то там может быть допустимый адрес где-то в выделенной памяти. 

Visual C++ в таком случае заполняет эти участки такими значениями, чтобы прога гарантированно вылетела, при попытке обращения, конечно в режиме отладки.
также указатели все инициализируются, в режиме отладки
Поэтому я и говорю -  баг Билдера получается  smile 

Это сообщение отредактировал(а) zkv - 6.10.2007, 15:32
PM MAIL   Вверх
Fazil6
Дата 6.10.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 11
Всего: 60



Цитата(AntonChik @  6.10.2007,  15:09 Найти цитируемый пост)
ок. знаю и верю. почему тогда работает первый код? кнопочки успешно создаются и даже щелкаются(!)


Цитата(AntonChik @  6.10.2007,  14:39 Найти цитируемый пост)
я не считаю, я поимел смелость лично в этом убедиться, продемонстрировав себе успешную компиляцию, запуск приложения и произведя действия, ведущие к вызову данного кода...

Код

TButton **b;
 int z;
 int n=10;

 for (z=0;z<n;z++)
  {
   b[z] = new TButton(Application);
   b[z]->Parent = Form1;
   b[z]->Visible=true;

   ShowMessage(n);   // << -----  думаю так твой работающий код рухнет
  }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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