Azero Geschrieben 27. Mai 2005 Geschrieben 27. Mai 2005 Hallo.. Ich hab hier ein Problem, welches sich einfach nicht lösen lassen will. Ich versuche ein Array vom Typ einer eigenen Struktur zu basteln. Schwierig dabei ist, das die Struktur aus 2 Parametern vom Typ char * besteht. Mir stellt sich jetzt die Frage, wie ich jetzt effizient Speicher für das Array als auch die beiden Strings in der Struktur allociere?? Ich versuch das mal in code auszudrücken. struct parameterValStr{ char *name; char *value; }; main{ struct parameterValStr *pvs; //Array vom typ pvs mit 2 elementen pvs=(parameterValStr *)malloc(sizeof(parameterValStr *)*2); pvs[0].name=(char *)malloc(sizeof(char)*32); pvs[0].value=(char *)malloc(sizeof(char)*32); pvs[1].name=(char *)malloc(sizeof(char)*32); pvs[1].value=(char *)malloc(sizeof(char)*32); //füllen auslesen.. free(pvs); } So wie ich es geschrieben habe, funktioniert es nicht wirklich, aber ich hoffe die Idee dahinter ist ersichtlich geworden? Kann mir jemand sagen, wie man das richtig umsetzt? gruß Azero Zitieren
Guybrush Threepwood Geschrieben 27. Mai 2005 Geschrieben 27. Mai 2005 Schwierig dabei ist, das die Struktur aus 2 Parametern vom Typ char * besteht. Das sind keine 2 Parameter sondern 2 Variablen oder Membervariablen. Aber das nur am Rande pvs=(parameterValStr *)malloc(sizeof(parameterValStr *)*2); Das ist falsch, du reservierst so nur Platz für 2 Pointer auf deine parameterValStr Struktur. Du willst aber Platz für 2 Strukturen reservieren also muss es so aussehen: pvs=(parameterValStr *)malloc(sizeof(parameterValStr)*2); [/PHP] free(pvs); Das reicht nicht du musst zuerst für jedes pvs Element den Speicher für name und value freigeben. Zitieren
Azero Geschrieben 27. Mai 2005 Autor Geschrieben 27. Mai 2005 ja richtig das waren keine Parameter sonder Variablen. und das mit dem * wars gewesen.. vielen dank.. Azo Zitieren
Bubble Geschrieben 27. Mai 2005 Geschrieben 27. Mai 2005 Erwäge einfach std::string zu verwenden und Deine Probleme mit der Speicherverwaltung lösen sich erst einmal in Luft auf Zitieren
Guybrush Threepwood Geschrieben 28. Mai 2005 Geschrieben 28. Mai 2005 Nein, er müsste immer noch dne Speicher für die Struktur allokieren. Wenn schon C++ dann könnte er noch vektor oder so nehmen. Zitieren
Bubble Geschrieben 28. Mai 2005 Geschrieben 28. Mai 2005 Nein, er müsste immer noch dne Speicher für die Struktur allokieren. Wenn schon C++ dann könnte er noch vektor oder so nehmen. Also bitte, ein struct parameterValStr { std::string name; std::string value; }; parameterValStr *pvs = new parameterValStr[2]; ... // tu was damit delete [] pvs ; ist doch bereits um Längen unkomplizierter, kürzer und übersichtlicher, da er sich um die Speicherverwaltung der Strings nicht selbst kümmern braucht. Und solange er feste Arraylängen hat, braucht er auch keinen Vektor. Zitieren
Empfohlene Beiträge
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.