Zum Inhalt springen

Vector und hor. Konsolenbuffer???


Empfohlene Beiträge

Geschrieben

Hi zusammen,

ich hab nen Problem gehabt (mittlerweile gelöst)...ich versteh aber nicht, was schiefgelaufen ist.

Also, Code ist folgender:


class cTestCaseTopic                            //Classdefinitionheader of Class cTestCaseTopic(TCT)

{

public:                                         //public accessable Functions and variables

cTestCaseTopic(string szName);                   //Constructor

string getName();                               //Fuction to return Name


bool addTCS(string szName,string szTCaseF, string szParamF);//Function to add a new TCS


//private:                                        //only from this class accessable variables and functions


string name;                                    //TCT's name


vector<cTestCaseSet> TCSVector;                 //TCS's owned by this TCT


};


bool cTestCaseTopic::addTCS(string szName,string szTCaseF, string szParamF)

{

    cTestCaseSet TCS_temp(szName,szTCaseF,szParamF);


    TCSVector.push_back(TCS_temp);


    TCS_temp.~cTestCaseSet();

};

so...und jetzt mein problem bei der Sache: Wenn ich
addTCT("","",");
nutze, gibt das erstmal keine Probleme. wenn ich
addTCT(foo,foo,foo);

nutze gibt das nen Speicherzugriffsfehler (logisch, weil ich aus dem vector lösche :upps , naja, passiert)

Wenn ein Wert jetzt aber höher ist als mein horizontaler Konsolenbuffer gibt das ne exception :confused:

und zwar:

"\KernelObjects\CritSecOutOfMemoryEvent"

ehhmmm...kann mir das einer erklären?

Weil Arbeitsspeicher ist genug frei.

Ist das evtl auch nen Zugriffsfehler, und Sec bedeutet irgendwas wie "Section" :confused:

Ist halt nur mal so interessehalber, weil ich so'n fehler noch nie hatte.

PS: ich hab jetzt einfach das löschen aus dem vector weggelassen:bimei, seitden klappts :old

Geschrieben
Wenn ich

addTCT("","",");
nutze, gibt das erstmal keine Probleme.
Glück gehabt.
wenn ich
addTCT(foo,foo,foo);

nutze gibt das nen Speicherzugriffsfehler (logisch, weil ich aus dem vector lösche :upps , naja, passiert)

War zu erwarten, dass dir das um die Ohren fliegt, aber die Begründung ist totaler Blödsinn. Du löscht nichts aus dem Vector.

Wenn ein Wert jetzt aber höher ist als mein horizontaler Konsolenbuffer gibt das ne exception :confused:

und zwar:

"\KernelObjects\CritSecOutOfMemoryEvent"

ehhmmm...kann mir das einer erklären?

Ja, das ist das Schöne bei undefiniertem Verhalten. Du kannst dich nicht darauf verlassen, dass es auf eine bestimmte Art und Weise abstürzt, du kannst dich nicht mal darauf verlassen, dass es überhaupt abstürzt (siehe dein erstes Beispiel).

PS: ich hab jetzt einfach das löschen aus dem vector weggelassen:bimei, seitden klappts :old

Wie gesagt, du löscht nichts aus dem Vector.

std::vector::push_bask legt eine Kopie des Objekts im Vector ab. Das Problem ist, dass du den Destruktor einer Autovariablen (TCS_temp) explizit aufrufst. Dasselbe passiert aber auch automatisch (und damit zum zweiten Mal), wenn das Objekt aus dem Scope läuft.

Solange du dein Objekt nicht mit placement-new angelegt hast, gibt es überhaupt keinen Grund, den Destruktor aufzurufen. Autovariablen tun das von allein, Objekte im Freispeicher musst du mit delete zerstören. Was immer du dir dabei gedacht hast, es ist Quatsch.

Geschrieben

hmm...hast irgendwie recht...verdammt, was bin ich blöd :old

nja...was ich jetz sage hast dir vermutlich schon gedacht...aber das Ding war mal als Pointer-Variabele definiert.

Okai...vielen Dank...das nächste mal denk ich vorher nach :-)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...