Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Objekte verschwinden ;(

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.05.2004, 15:32 Uhr
~Michael L.
Gast


Hi,
ich habe eine einfache Klasse (Dialog). In der Init lege ich einige Objekte mit new an. Doch möchte ich sie später in einer Funktion nutzen, dann kennt er sie auf einmal nicht mehr und ich bekomme eine Access Violation! Ich habe nun echt keine Ahnunh wo ich da suchen soll. Ich habe das Objekt weder gelöscht (delete), noch habe ich den Zeiger auf was anderes zeigen lassen.


C++:
BOOL CTestShapeLibDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // Hinzufügen des Menübefehls "Info..." zum Systemmenü.

    // IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        if (!strAboutMenu.IsEmpty())
        {    
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    SetIcon(m_hIcon, TRUE);            // Großes Symbol verwenden
    SetIcon(m_hIcon, FALSE);        // Kleines Symbol verwenden
    
    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    AfxInitRichEdit();

    // Konverter erzeugen
    m_converter = new CConverter();
    // Back Button deaktiveren
    m_ctrlBack.EnableWindow(FALSE);
    // Values Dialog erstellen und anzeigen
    m_valuesDlg = new CValuesDlg(this);
    m_valuesDlg->Create(IDD_VALUES);
    m_valuesDlg->ShowWindow(SW_SHOW);
    // View Dialog erstellen
    m_viewDlg = new CViewDlg(this);
    m_viewDlg->Create(IDD_VIEW);
    
    return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den
Fokus erhalten
}



Das ist die Init, und in der Funktion möchte ich auf die Objekte zugreiffen


C++:
bool CTestShapeLibDlg::LoadShape()
{
    CConverter* m_converter = new CConverter();
    // Shapefile einlesen
    if(m_converter->LoadShapeFileFromPath("test.shp"))
    {
        // Tif zeichnen
        m_converter->DrawShapeToFile();
    }
    return true;
}





Wäre super wenn jemand eine Idee hat, THX

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.05.2004, 16:16 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also wenn das alles membervariablen sind solltest du problemlos drauf zugreifen können...
was allerdings ne üble sache ist, ist der spass in deiner funktion


C++:

    CConverter* m_converter = new CConverter();//den pointer m_converter gibts nach durchlaufen deiner funktion nicht mehr und damit hängt dann der speicher verloren im heap rum, weil du kein delete aufrufst...
bei jedem durchlauf verballerst du immer mehr speicher
    // Shapefile einlesen
    if(m_converter->LoadShapeFileFromPath("test.shp"))
    {
        // Tif zeichnen
        m_converter->DrawShapeToFile();
    }
    return true;
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.05.2004, 18:28 Uhr
~Michaek
Gast


Shit ne das war nu ein Test ob es an der Klasse liegt. Das sollte da nicht drin sein...

Also der normale Code ist ohne die Zeile und wenn ich die Debuge bekomme ich immer Ausdruck m_connverter kann nicht ausgewertet werden.

Ich verstehs nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.05.2004, 18:59 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also mit dem Codebrocken so kann ich dir nicht weiterhelfen... was dir allerdings klar sein sollte ist wenn du m_converter innerhalb deiner mehtode nochmal anlegst das dann auch die lokale variable m_converter verwendet wird und nicht die membervariable deines objectes...
wenn du die dann haben willst musst du den scope auflösen oder mit this->m_converter zugreifen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.05.2004, 19:18 Uhr
~Michael
Gast


Das ist mir vollkommen klar, deshalb ist die Zeile normal nicht drin. War nur ein Test ob es, wenn ich sie lokal anlege, funktioniert.

Das tut es auch, nur die Membervariable ist halt nicht initialisiert
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: