Taffspeed Postinho Beitrag melden Geschrieben 5. Dezember 2007 (bearbeitet) nachdem ich schon in einem c++ forum einige mit meinem problem gequält habe und mir nicht direkt einer helfen konnte, stelle ich die frage nun hier, ev. findet sich ja wer, der dieses problem kennt: zuerst mal den untenstehen code kann man sicher vereinfachen, aber um das sollte es auch nicht gehen. ich fülle einen vector mit pointern. und so eine klasse die als member einen vector hat wird dann auch noch als array angelegt. sprich ich habe in diesem beispiel 5 vectoren dem 10000 pointer elemente hinzugefügt wurden mit einer größe von 1024bytes. so weit so gut. wenn ich am ende das ganze wieder freigebe, wird jedes vector-daten-element zerstört (bestätigt mir auch valgrind), trotzdem werden mir laut top bei meiner pid in der RES spalte 50mb nicht mehr freigegeben. kann mir jemand sagen warum das so ist? ich habe auch schon mir einen zweiten dienst gebastelt, der mir den restlichen freien speicher zumüllt, damit ich überprüfen kann ob mir dann das OS den speicher freigibt, leider nein. das ganze tritt unter linux auf. unter windows gibt es das problem nicht und ist für mich dort auch unwichtig, nur linux zählt in diesem fall #define LIST_COUNT 5 #define BUFFER_SIZE 1024 #define BUFFER_ADDS 10000 class Data { public: string name; public: Data() {} ~Data() {} void Set(const char* _name) {name = _name;} }; class DataListPointer { private: vector<Data*> dataList; public: DataListPointer() {} virtual ~DataListPointer() { } void Clear() { cout << "DataListPointer::Clear()" << endl; for(uint i=0; i< dataList.size(); i++) { delete dataList.at(i); dataList.at(i) = NULL; } dataList.clear(); vector<Data*>().swap(dataList); // kann man aufrufen oder weglassen, hat am ende keinen einfluss } void Add(const char *_name) { Data *dataobj(new Data()); // Name setzen ---- if (_name) dataobj->Set(_name); // Element in Liste hinzfügen dataList.push_back (dataobj); } }; int main () { char buffer[BUFFER_SIZE+1]; memset(buffer, 'A', BUFFER_SIZE); buffer[BUFFER_SIZE] = '\0'; DataListPointer *datalist[LIST_COUNT]; for(int idx=0; idx<LIST_COUNT; idx++) { datalist[idx] = new DataListPointer(); for(int i=0; i<BUFFER_ADDS; i++) datalist[idx]->Add(buffer); } for(int idx=0; idx<LIST_COUNT; idx++) { datalist[idx]->Clear(); delete datalist[idx]; datalist[idx] = NULL; } while(1) sleep(1); } ev. hat hier ja ein anderer c++ programmierer eine idee. bearbeitet 5. Dezember 2007 von Taffspeed 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
-grünweiß- ASB-Legende Beitrag melden Geschrieben 10. Januar 2011 Hallo, ich grab den Thread mal für mich aus, vielleicht kann mir ja wer helfen: printf("Hallo mein Name ist %d\n",name); Was ist daran falsch? Lg 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
FAK-masteR AAAAlte Zeiten Beitrag melden Geschrieben 10. Januar 2011 Was ist "name"? Wenn es int ist, was ich aber nicht glaube, dann stimmt es. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
StepDoWn Captain Awesome Beitrag melden Geschrieben 10. Januar 2011 (bearbeitet) Hallo, ich grab den Thread mal für mich aus, vielleicht kann mir ja wer helfen: printf("Hallo mein Name ist %d\n",name); Was ist daran falsch? Lg Wäre hilfreich wenn du sagst welche (Programmier-)Sprache du verwendest. bearbeitet 10. Januar 2011 von StepDown 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
-grünweiß- ASB-Legende Beitrag melden Geschrieben 10. Januar 2011 Wäre hilfreich wenn du sagst welche (Programmier-)Sprache du verwendest. Hallo, das ist C. Und name ist der Name den ich eingeben will!! 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
FAK-masteR AAAAlte Zeiten Beitrag melden Geschrieben 10. Januar 2011 (bearbeitet) Hallo, das ist C. Und name ist der Name den ich eingeben will!! Poste bitte mal den gesamten Code, da stimmts mit Sicherheit hinten und vorne nicht. Du willst, dass steht: Hallo mein Name ist Markus (zB). Und willst du den Namen selbst eingeben oder nicht? bearbeitet 10. Januar 2011 von FAK-masteR 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Winter Auswärts nie dabei, z'haus die scheißerei! Beitrag melden Geschrieben 10. Januar 2011 Das Programm macht irgendwie keinen Sinn, denn was macht denn das %d da? Wenn du eine Variable einlesen willst nimm' doch einfach scanf()? 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
jimmy1138 V.I.P. Beitrag melden Geschrieben 10. Januar 2011 Brauchst da nicht %s? 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Winter Auswärts nie dabei, z'haus die scheißerei! Beitrag melden Geschrieben 10. Januar 2011 Kommt auf den Typ der "eingescannten" Variable an. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
-grünweiß- ASB-Legende Beitrag melden Geschrieben 11. Januar 2011 (bearbeitet) Also es ist so (habe den Code jetzt nicht bei mir): eingegeben wird nichts. weiß jetztnicht wie die Zeilen genau ausschauen aber ca so: void main() ( char name[5] = Peter; printf(("Hallo mein Name ist %d\n"),name); ) bearbeitet 11. Januar 2011 von -grünweiß- 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
FAK-masteR AAAAlte Zeiten Beitrag melden Geschrieben 11. Januar 2011 Also es ist so (habe den Code jetzt nicht bei mir): eingegeben wird nichts. weiß jetztnicht wie die Zeilen genau ausschauen aber ca so: void main() { char name[6] = "Peter"; printf("Hallo mein Name ist %s\n",name); } FYP - müsste hinhaun. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Simschi Posting-Pate Beitrag melden Geschrieben 15. Januar 2011 Kann mir jemand sagen warum dabei: // Listing2.2 zeigt die Verwendung von cout #include <iostream> using namespace std; int main() { cout << "Hallo dort.\n"; cout << "Hier ist 5: " << 5 << "\n"; cout << "Der Manipulator endl beginnt eine neue Zeile."; cout << endl; cout << "Hier ist eine große Zahl:\t" << 70000 << endl; cout << "Hier ist die Summe von 8 und 5:\t" << 8+5 << endl; cout << "Hier ist ein Bruch:\t\t" << (float) 5/8 << endl; cout << "Und eine riesengroße Zahl:\t"; cout << (double) 7000 * 7000 << endl; cout << "Vergessen sie nicht, Jesse Liberty durch ihren Namen" " zu ersetzen...\n"; cout << "Hugo ist ein C++ Programmierer!\n"; return 0; } das: ------ Erstellen gestartet: Projekt: huhu, Konfiguration: Debug Win32 ------ 1>LINK : error LNK2001: Nicht aufgelöstes externes Symbol "_mainCRTStartup". 1>c:\users\admin\documents\visual studio 2010\Projects\huhu\Debug\huhu.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise. ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ========== rauskommt :huh?deppat?: 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
FAK-masteR AAAAlte Zeiten Beitrag melden Geschrieben 19. Januar 2011 (bearbeitet) Kann mir jemand sagen warum dabei: // Listing2.2 zeigt die Verwendung von cout #include <iostream> using namespace std; int main() { cout << "Hallo dort.\n"; cout << "Hier ist 5: " << 5 << "\n"; cout << "Der Manipulator endl beginnt eine neue Zeile."; cout << endl; cout << "Hier ist eine große Zahl:\t" << 70000 << endl; cout << "Hier ist die Summe von 8 und 5:\t" << 8+5 << endl; cout << "Hier ist ein Bruch:\t\t" << (float) 5/8 << endl; cout << "Und eine riesengroße Zahl:\t"; cout << (double) 7000 * 7000 << endl; cout << "Vergessen sie nicht, Jesse Liberty durch ihren Namen" " zu ersetzen...\n"; cout << "Hugo ist ein C++ Programmierer!\n"; return 0; } das: ------ Erstellen gestartet: Projekt: huhu, Konfiguration: Debug Win32 ------ 1>LINK : error LNK2001: Nicht aufgelöstes externes Symbol "_mainCRTStartup". 1>c:\users\admin\documents\visual studio 2010\Projects\huhu\Debug\huhu.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise. ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ========== rauskommt :huh?deppat?: Was für eine Anwendung hast du denn erstellt? bearbeitet 19. Januar 2011 von FAK-masteR 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Simschi Posting-Pate Beitrag melden Geschrieben 20. Januar 2011 w32 console, hab das ganze jetzt nochmal in Codeblocks compiliert, und dort funktionierts wunderbar :huh?deppat?: Ich bleib jetzt mal bei Codeblocks das 2010er Visual Studio hat andauernd was zu meckern so wie zb oben, obwohl ich keinen Fehler finde. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Taffspeed Postinho Beitrag melden Geschrieben 16. Februar 2011 gibt es hier leute die sich mit der boost richtig gut auskennen? kennt jemand eine möglichkeit, dass man zb. bei boost::format eine parameterliste übergibt (va_list) ? oder eine andere funktionalität in der boosst die mir das zulässt? ich möchte gerne das vsnprintf gegen was "dynamischeren" tauschen, jedoch mit der gleichen performance wie vsnprintf. aja linux-spezifische sachen sind auch erlaubt (in diesem fall zb. open_memstream - jedoch auch fast zu "langsam") 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.