Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка при завершении программы / 6 сообщений из 6, страница 1 из 1
26.10.2007, 17:53:42
    #34898413
Dymanovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при завершении программы
BCB6. В отладчике просмотрел, что когда выполняется последняя инструкция (закрывающаяся фигурная скобка после return 0 в срр файле проекта), то возникает ошибка Access Violation по адресу 46. В режиме отладки невозможно нормально завершить работу программы. Что делать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Main.cpp", MainForm);
USEFORM("UScale.cpp", FScale);
USEFORM("UColledges.cpp", FColledges);
USEFORM("UDM1.cpp", DM1); /* TDataModule: File Type */
USEFORM("UDetail.cpp", FDetail);
USEFORM("ULogo.cpp", FLogo);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 Application->Initialize();
                 Application->Title = "Электронная карта";
                 Application->CreateForm(__classid(TMainForm), &MainForm);
                 Application->CreateForm(__classid(TFScale), &FScale);
                 Application->CreateForm(__classid(TFColledges), &FColledges);
                 Application->CreateForm(__classid(TDM1), &DM1);
                 Application->CreateForm(__classid(TFDetail), &FDetail);
                 Application->CreateForm(__classid(TFLogo), &FLogo);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        catch (...)
        {
                 try
                 {
                         throw Exception("");
                 }
                 catch (Exception &exception)
                 {
                         Application->ShowException(&exception);
                 }
        } 
        return  0 ;
}
...
Рейтинг: 0 / 0
26.10.2007, 18:03:00
    #34898441
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при завершении программы
недавно такое попадалось, вылечилось только явным delete MainForm; перед return-ом.
...
Рейтинг: 0 / 0
27.10.2007, 23:12:45
    #34899469
AndrewP_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при завершении программы
Это может быть в случае, если в какой либо из форм вы создаете VCL объект, наследник TComponent, выделяя под него память:
TMyObject *MyObject=new TMyObject(this);

Затем в явном виде уничтожаете его:
delete MyObject;

При завершении работы срабатывает деструктор формы и он вызывает в неявном виде деструкторы всех объектов, которым он является собственником (Owner), в частности MyObject.
Но My Object уже не существует и возникает Access Violation.
...
Рейтинг: 0 / 0
28.10.2007, 01:46:31
    #34899541
Dymanovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при завершении программы
Ничего не помогает. Приложил исходники. Вы не могли бы посмотреть в чем дело. Для воспроизведения процедуры выхода в каталоге с приложением необходимо создать файл Carte.jpg размер изображения - 4987*4467 пикселов. Также отсутствует форма заставки, ввиде её большого размера (660кб). Заранее спасибо.
...
Рейтинг: 0 / 0
28.10.2007, 02:09:22
    #34899554
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при завершении программы
я бы на вашем месте обратил внимание вот на этот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
void __fastcall TMainForm::FormShow(TObject *Sender)
{
   try
   {
      // Закоментировано мной
      //FLogo->ShowModal();
      try
      {
         // Закоментировано мной 
         //FLogo->Free();
      }
      catch(...)
      {
      }
      /* Закоментировано мной
      MainForm->Image_de_Carte->Picture->LoadFromFile("Carte.jpg");
      Ajoute_les_donnes_des_images ();
      Dessiner_a_la_fenetre ();*/
   }
   catch(...)
   {
   }
}
конкретно не нравится вот этот момент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
      
try
      {
         FLogo->Free();
      }
      catch(...)
      {
      }
совершенно не нужная конструкция, скорее всего из-за неё всё и валится, т.к. FLogo очищается сначала Вами, а потом - билдером, по завершении приложения

и есть ещё момент, в FormClose() - конструкция this->Close(); излишня, достаточно просто Close();
хотя, конечно, мелочь...
...
Рейтинг: 0 / 0
31.10.2007, 01:57:11
    #34906101
Dymanovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при завершении программы
Нашёл ошибку. Скорее всего размерность массива, где хранились исходные параметры компонентов была на 1 меньше чем надо (я его заменил на вектор, а на исходную размерность не обратил внимания).
Всем большое спасибо.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка при завершении программы / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]