Mehrfache Speicherung von Strings ohne zusätzliche Pointer
-
Hallo,
ich habe Probleme meine neuste Idee umzusetzen. Ich will eigentlich mehrere neue Alphabete dynamisch erstellen und diese dann in der Hauptfunktion nutzen (mit den neuen Alphabeten Buchstaben verschlüssel) ohne, dass ich gleich zehn neue Zeiger deklarieren muss (zum schluss sind es 50...). Ich hatte mir vorgestellt es irgendwie mit arrys von Zeigern zu machen, aber ich meine gelesen zu haben, dass es nicht funktioniert und ehh ich in die falsche Richtung gehe frage ich lieber mal nach. ^^
Idee:
|char (*zeiger) [50];| anstatt 50 * |char zeigerX;|
=> aber es funtkioniert so nicht mit der funktion. da es eine "conversion from char zu char*[50]" ist. was muss ich ändern?\E: hab jetzt zusätzlich alles unwichtige weggemacht
#include <cstdio> #include <cstdlib> char *alphabet(char verfahrensteil) { char alpha1[28] = "abcdefghijklmnopqrstuvwxyz "; char *alpha2; int i; alpha2 = (char*) malloc(28); //in diesem bereich wird alpha2 eiegntlich mit buchstaben gefüllt, ist aber wegelassen wurden return alpha2; } int main() { int i; //zum schluss brauch ich bis zu 50 zeiger für mein programm wenn ich es so machen würde char *zeiger; char *zeiger2; //man sieht das problem... bei 50 heßt das 50 mal sowas... es muss doch einefacher gehen ^^ zeiger = alphabet('c'); zeiger2 = alphabet('d'); printf("%c\n\n", *(zeiger+2)); free(zeiger); scanf("%d", &i); return 0; }
-
char *zeiger[50];
-
ok es funtkioniert
hatte beim letzten mal vergessen
*(zeiger+i) zu schreiben ^^
noch eine frage gibt das
free(zeiger) in der main funktion den speicherbereich, der mit alpha2 erstellt wurde, wirklich frei?
-
noch eine frage gibt das
free(zeiger) in der main funktion den speicherbereich, der mit alpha2 erstellt wurde, wirklich frei?
Sollte es.
Du könntest auch mitzählen,
indem du wrapper für malloc und free benutzt:static long alloc_count = 0; void free_(void *pt) { free(pt); alloc_count--; } long allocated() { return alloc_count; } void *malloc_(size_t size) { void *p = malloc(size); alloc_count += p ? 1 : 0; return p; }