Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fehler bei "new"

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 < [ 2 ]
000
27.07.2003, 11:57 Uhr
~Thomas
Gast


Hi!

Wieder einmal ein Problem:


Ich habe da eine Klasse Daten und mit der mache ich das:

C++:
Daten *pDaten;
pDaten = new Daten("1",1,"1.Ebene");


Kann da irgendetwas falsch sein?
Weil er gibt nähmlich beim Ausführen soetwas aus:

--------------------
Debug Assertion Failed!
Programm: .....
File dbgheap.c (Das habe nicht ich gemacht)
Line: 1017

Expression: _BLOCK_TYPE_ISS_VALID(pHead->nBlockUse)

Abbrechen Wiederholen Ignorieren

---------------------

Wenn ich ignoriere kommt nocheinmal so eine Fehlermeldung und er stürzt ab, wenn ich wiederhole dann stürzt er gleich ab.

Im Debug Modus fragt er mich wo die new.cpp ist.

Kann sich da irgendjemand vorstellen wo das Problem liegt??

Ist übrigens ein sehr interessantes Forum! Habe mir einige Themen angesehen. Da wird alles ausführlich Diskutiert! Hoffe dass ihr auch meine Frage versteht...

Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.07.2003, 12:04 Uhr
0xdeadbeef
Gott
(Operator)


Welcher Compiler?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.07.2003, 12:07 Uhr
Oliver
S2-Pixelgeneral


Hallo Thomas,

wie sieht der Konstruktor deiner Klasse aus oder poste am besten mal die ganze Klasse...
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.07.2003, 12:18 Uhr
~Thomas
Gast


Hi!
Geht schnell dass man hier Antworten bekommt!
Mein Compiler ist VC++


C++:
class Daten
{
public:
    Daten(string wert, int Pos, string name):myWert(wert),myPos(Pos),myName(name){}
    ~Daten(){}
    void show(){}
    
    bool vergleich(Daten * theDaten);
    string getWert(){return myWert;}
    int getPos(){return myPos;}
    string getName(){return myName;}
    string getPfad(int pos){return myPfad[pos];}
    void setPfad(int pos, string Wert){myPfad[pos]=Wert;}

private:
       myXxxx
        ....
};




Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.07.2003, 12:28 Uhr
0xdeadbeef
Gott
(Operator)


OK, bei Visual C++ im Debugmodus müsste in der linken unteren Ecke ein Drop-Down-Menü sein, in dem steht, in welcher Funktion du dich gerade befindest. Mach das mal auf, was steht da drin?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.07.2003, 13:51 Uhr
virtual
Sexiest Bit alive
(Operator)


Eine Assertion dieser Art kommt dadurch zu Stande, daß Du dir den Heap zerschossen hast. "Beliebt" sind zwei Möglichkeiten:
1. Speicher, der einmal belegt wurde (new, malloc) wurde mehr als einmal freigegeben (delete, free). Ist eher unwahrscheinlich, weil Du dann bereits beim delete/free eine Assertion bekommen solltest.
2. Du greifst Auf Speicher zu, der Dir nicht gehört, also zB auf einen nicht initialisierten Pointer und/oder auf einen Bereich ausserhalb des belegten.

Zwar magst Du jetzt einen Absturz im Destructor von der Klasse Daten haben (ist mein tip), Die Ursache kann aber auch ganz woanders liegen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.07.2003, 14:12 Uhr
~Thomas
Gast


Hi!
Uuups!
Habe nicht genau genug geschaut!
Er stürzt erst beim return ab.

C++:
int main()
{
    Daten *pDaten;
    pDaten = new Daten("1",1,"1.Ebene");
    pDaten->setPfad(1,"1.Ebene");
    InternerKnoten IK(pDaten);
    pDaten = new Daten("1",2,"2.Ebene");
    pDaten->setPfad(1,"1.Ebene");
    pDaten->setPfad(2,"2.Ebene");
    IK.einfugen(pDaten);

    return 0;
}


Zuerst ist er in main() dann schreit er: geben sie einen Pfad für "new.cpp" an.
wenn ich im Debug keine Datei angebe sondern auf abbrechen gehe ist er dort:
operator new(unsigned int 516) line 23

Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.07.2003, 14:32 Uhr
virtual
Sexiest Bit alive
(Operator)


Beim Return wird zB der desrutor von IK aufgerufen...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
27.07.2003, 15:04 Uhr
~Thomas
Gast


Der macht gar nichts...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
27.07.2003, 16:30 Uhr
Tommix



Hallo,
da fehlen die deletes zu den beiden news (jedenfalls sind sie nicht in dem von Dir gepostetem Code).

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


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: