vector problem !
-
Hallo Leute,
schon wieder ich.
Ich Fülle in einer Funktion einen Vector mit:
Class* pClass = new Class(m_strZeile, u_iServerID, this); vector.push_back(pClass);Diesen gefüllten Vector möchte ich wieder mit
for(int x=0;x < vector.size();x++) { delete vector[x]; }entleeren und Speicher frei geben.
Funktioniert auch, aber wenn ich in der nächsten runde den vector wieder fülle, was er auch tut, dann auf eine Variable in Class zugreiffen möchte bricht er ab und bringt ein runtime error ??
Kann mir jemand dazu helfen, was mache ich falsch ??
Gruß und Danke
andy_mann
-
kanns sein dass du nicht nur den Speicher Freigeben musst, sondern auch den Vector auf die richtige größe anpassen?
Denn mit push_back hängst du nur hinten am Vector immer wieder was dran.
Wenn du also zuerst 50 elemente reinsteckst, diese dann via deiner Delete-Schleife löscht und dann wieder 50 Elemenete reinstreckst. Sind insgesamt 100 Elemente drin, 50 Zeiger auf Objekte die gelöscht sind ( wenn du über die auf irgendwelche Objektmember zugreifen magst krachts halt ) und 50 Elemente die tatsächlich existieren.
-
Ich danke Dir,
könntest Du mir eventuell auch sagen, wo und wie man die größe des Vectors definiert ??
Gruß
andy_mann
-
Sample Code:
//////////////////////////////////////////////////////////////////////
//
// Compile options needed: /GX
//
// Empty.cpp -- Illustrates the vector::empty and vector::erase
// functions.
// Also demonstrates the vector::push_back function.
//
// Functions:
//
// vector::empty - Returns true if vector has no elements.
//
// vector::erase - Deletes elements from a vector (single & range).
//
// vector::begin - Returns an iterator to start traversal of the
// vector.
//
// vector::end - Returns an iterator for the last element of the
// vector.
//
// vector::push_back - Appends (inserts) an element to the end of a
// vector, allocating memory for it if necessary.
//
// vector::iterator - Traverses the vector.
//
//////////////////////////////////////////////////////////////////////also es gibt noch ein clear das alle elemente löscht, wenn du´s genauer wissen willst schau mal in der Hilfe von VS nach

-
Genau da fängt ja mein Problem an,
momentan mache ich es mit
vector.clear();dass hat aber zur Folge, dass ich mit meinem Arbeitsspeicher Probleme bekomme.
Ich wollts mit delete machen, da krachts aber...Gruß
andy_mann
-
delete und clear sind aber zwei unterschiedliche Geschichten;
clear ändert nur die Anzahl der Elemente im Vector spricht setzt Vector auf Größe 0, und du kannst wieder was rein hängen ohne alte Werte drin zu haben.
delete gibt Speicher frei. Ändert aber nichts an der Größe vom Vector.
Du mußt einfach so vorgehen:
erst delete Anweisungen und wenn die fertig sind die Größe des Vectors ändern.
-
spricht wenn du nur clear machst ist zwar dein Vector wieder "clean" aber alle Elemente die drin hingen im Vector belegen immernoch speicher