C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
AV при создании объекта, Странности new
gen
Отправлено: 22.05.2006, 08:53


Дежурный стрелочник

Группа: Участник
Сообщений: 36



Привет!

Столкнулся тут со "странным" поведением new на разных машинах. Хотелось бы разобраться. Суть следующая — есть код динамического создания пунктов гл. меню:
CODE

int i;
TMenuItem* M_menu;

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("Select Name from Main_menu order by Name");
Query1->Open();
Query1->First();

N8->Clear();// очистка подменю
i=0;
while (!Query1->Eof)
{
i++;
TMenuItem* Itm = new TMenuItem(M_menu);
Itm->Caption = Query1->FieldValues["Name"];
Itm->Name = "Nm"+IntToStr(i);
Itm->OnClick=Menu_click;
N8->Add(Itm);
Query1->Next();
}
Query1->Close();

Так вот, на одних машинах все отрабатывает без проблем, а на других — вываливается AV в библиотеке RTL при создании объекта. В то же время если создавать Itm через
CODE
TMenuItem* Itm = new TMenuItem(this);
то на всех машинах работает без вопросов. Системы на всех машинах одинаковые WinXP SP2 Rus. Вопрос, в общем, не принципиальный, но всегда возникает недоумение, когда сталкиваешься с "системозависимостью" кода.
olegenty
Отправлено: 22.05.2006, 12:00


Ветеран

Группа: Модератор
Сообщений: 2412



на тех, где работает — завёлся барабашка, который и вводит тебя в заблуждение.
вот причина ошибки:
CODE

TMenuItem* M_menu;

M_menu — не инициализированная переменная. надо писать так:
CODE

TMenuItem* M_menu = NULL;

либо
CODE

TMenuItem* M_menu = <some value>;

ошибка происходит на тех машикнах, где M_menu != NULL

Вернуться в Вопросы программирования в C++Builder