powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка при завершении программы
6 сообщений из 6, страница 1 из 1
Ошибка при завершении программы
    #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
Ошибка при завершении программы
    #34898441
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
недавно такое попадалось, вылечилось только явным delete MainForm; перед return-ом.
...
Рейтинг: 0 / 0
Ошибка при завершении программы
    #34899469
AndrewP_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это может быть в случае, если в какой либо из форм вы создаете VCL объект, наследник TComponent, выделяя под него память:
TMyObject *MyObject=new TMyObject(this);

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

При завершении работы срабатывает деструктор формы и он вызывает в неявном виде деструкторы всех объектов, которым он является собственником (Owner), в частности MyObject.
Но My Object уже не существует и возникает Access Violation.
...
Рейтинг: 0 / 0
Ошибка при завершении программы
    #34899541
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не помогает. Приложил исходники. Вы не могли бы посмотреть в чем дело. Для воспроизведения процедуры выхода в каталоге с приложением необходимо создать файл Carte.jpg размер изображения - 4987*4467 пикселов. Также отсутствует форма заставки, ввиде её большого размера (660кб). Заранее спасибо.
...
Рейтинг: 0 / 0
Ошибка при завершении программы
    #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
Ошибка при завершении программы
    #34906101
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл ошибку. Скорее всего размерность массива, где хранились исходные параметры компонентов была на 1 меньше чем надо (я его заменил на вектор, а на исходную размерность не обратил внимания).
Всем большое спасибо.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка при завершении программы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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