Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » ListView, Add("Tick"): Fehler im Debugmodus

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
13.10.2006, 11:59 Uhr
~pAT
Gast


Hi!

erstmal: Ich nutze Microsoft Visual Studio .NET 2003 (C++)

Ich will in meinem Programm zyklisch ein Item hinzufügen.
folgender Code funktioniert:


C++:
void Form1::timer1_Tick(System::Object *  sender, System::EventArgs *  e)
{
    listView1->Items->Add("Tick", 3);
}



Wenn ich diesen Befehl jedoch ausrangiere und den Timer starte bekomme ich während dem Debuggen einen Fehler. Das Compilieren funktioniert.

Fehlerhafter Code:


C++:
void Form1::timer1_Tick(System::Object *  sender, System::EventArgs *  e)
{
    //listView1->Items->Add("Tick", 3);
    
    Form1 * Scan;
    Scan->GetIDs();
    
    
}

void Form1::GetIDs()
{
    this->listView1->Items->Add("Tick");  // <- Die Fehlermeldung verweist auf diese Zeile: Zeile 116
}



Header:


C++:
    
             //...
             public:
        void Dispose(Boolean disposing)
        {
            if (disposing && components)
            {
                components->Dispose();
            }
            __super::Dispose(disposing);
        }
    public: void GetIDs(char*);                                                       // <----
    public: System::Windows::Forms::ListView *  listView1;

    private: System::Windows::Forms::GroupBox *  groupBox1;
    private: System::Windows::Forms::GroupBox *  groupBox2;
    private: System::Windows::Forms::TextBox *  textBox1;
             //...






Die Fehlermeldung lautet:


Zitat von Windows:


Informationen über das Aufrufen von JIT-Debuggen
finden Sie am Ende dieser Meldung, anstatt in diesem Dialogfeld.

************** Ausnametext **************
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
at ListViewDieZweite.Form1.GetIDs(SByte* __unnamed000) in d ... \form1.cpp:line 116
at ListViewDieZweite.Form1.timer1_Tick(Object sender, EventArgs e) in ddokumente und einstellungen\acp13\eigene dateien\visual studio projects\listviewdiezweite\form1.cpp:line 107
at System.Windows.Forms.Timer.OnTick(EventArgs e)
at System.Windows.Forms.Timer.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr idEvent, IntPtr dwTime)




Hat einer von euch eine Ahnung woran das liegen könnte?

Vielen Dank!

pAT
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.10.2006, 12:19 Uhr
~pAT
Gast


sry, im Header ist mir ein Fehler passiert.
Der (char*) gehört nicht mehr dazu...
Der richtige lautet:


C++:
             //...
             public:
        void Dispose(Boolean disposing)
        {
            if (disposing && components)
            {
                components->Dispose();
            }
            __super::Dispose(disposing);
        }
    public: void GetIDs();                                // <----
    public: System::Windows::Forms::ListView *  listView1;

    private: System::Windows::Forms::GroupBox *  groupBox1;
    private: System::Windows::Forms::GroupBox *  groupBox2;
    private: System::Windows::Forms::TextBox *  textBox1;
             //...

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.10.2006, 12:49 Uhr
ao

(Operator)


Hier stehts doch:

Zitat:
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Ursache:

C++:
void Form1::timer1_Tick(System::Object *  sender, System::EventArgs *  e)
{
    //listView1->Items->Add("Tick", 3);
    
    Form1 * Scan;    // wilder Pointer, der nicht auf eine gültige Form1-Instanz zeigt
    Scan->GetIDs(); // wilden Pointer dereferenzieren -> Crash.
}


Auf die Gefahr hin, dass ihr den Spruch schon kennt: Leute, testet eure Programme im Debugger, gerade solche Fehler findet man damit im Handumdrehen.

ao

Dieser Post wurde am 13.10.2006 um 12:50 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.10.2006, 13:20 Uhr
~pat
Gast


Vielen Dank!!
Es funktioniert!


C++:
void Form1::timer1_Tick(System::Object *  sender, System::EventArgs *  e)
{
    //listView1->Items->Add("Tick", 3);
    this->GetIDs();    
}



Ich hoffe, DAS ist der richtige Weg...

Wie auch immer, DANKE!
 
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: