To jest klasa hierarchia, która używa mój program:Tajemniczy przepełnienie stosu w konstruktorze
Konstruktor TForm_Upgrade_Database wygląda jak następuje:
__fastcall TForm_Upgrade_Database :: TForm_Upgrade_Database (TComponent * Właściciel, int latest_version) : TForm (właściciel) { }
Po starając się stworzyć instancję FORMULAR
TForm_Upgrade_Database *dlg = new TForm_Upgrade_Database(this, newest_version);
mój program wyrzuca EStackOverflow wyjątkiem
zatrzymałem program i prowadził ją ponownie z przerwania w konstruktorze TForm_Upgrade_Database. Po kilku kroków callstack wygląda następująco:
Jak to jest, że konstruktor TCustomForm utrzymuje próby wywołania konstruktora swojego potomka ???
minimalna sprawdzian:
so_project.cpp:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "f_form.h"
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
TForm_Upgrade_Database *form = new TForm_Upgrade_Database(NULL, 10);
delete form;
form = NULL;
return 0;
}
//---------------------------------------------------------------------------
f_form.cpp:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "f_form.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm_Upgrade_Database *Form1;
//---------------------------------------------------------------------------
__fastcall TForm_Upgrade_Database::TForm_Upgrade_Database(TComponent* Owner, int x)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
f_form.h:
//---------------------------------------------------------------------------
#ifndef f_formH
#define f_formH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm_Upgrade_Database : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm_Upgrade_Database(TComponent* Owner, int x);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm_Upgrade_Database *Form1;
//---------------------------------------------------------------------------
#endif
Zrzuty ekranu i diagramy naprawdę nie pomagają nikomu zidentyfikować problemu. Proszę skonstruować [** minimal ** przypadek testowy] (http://sscce.org), a następnie opublikować kod. –
Czy tworzysz kolejny obiekt aktualizacji w konstruktorze? – perreal
Kolejny problem z przepełnieniem stosu w StackOverflow :) – nikhil