C: Zwei Arrays - eine Speicheradresse???
-
CStoll schrieb:
3. Und ich hoffe, du hast das dazugehörige free() nicht vergessen
ne habe ich nicht... die datenstrucktur wird bis zum schluss gebraucht und beim schliessen des programms wird der speicher sowieso freigegeben
-
Startparameter noch mal zu kopieren scheint mir irgendwie ziemlich sinnlos. Sicher, dass du das nicht anders machen kannst? Was stellst du denn mit argv[i] böses an?
-
Dir ist schon klar, daß für den Zeiger buf die selben Scope-Regeln gelten wie für die Arrays im Eröffnungsbeitrag - sobald sie aus dem Gültigkeitsbereich fallen, ist ihr Wert futsch und damit auch der Speicher, den du per malloc() angefordert hast. Sowas nennt sich i.a. "Speicherleck".
Was willst du denn eigentlich mit dieser "datenstrucktur" erreichen? Das sieht so aus, als ob du möglicherweise zu kompliziert gedacht hast.
PS: gegen das "+1" sagt niemand etwas, aber das "sizeof(char)" ist redundant
-
Reicht es nicht aus, die beiden Buffer direkt beim i zu definieren?
-
cooky451 schrieb:
Startparameter noch mal zu kopieren scheint mir irgendwie ziemlich sinnlos. Sicher, dass du das nicht anders machen kannst? Was stellst du denn mit argv[i] böses an?
ich brauch ein paar ausführungen davon. denn beim
file = fopen(strcat(argv[i], ".txt"), "w+")
schreib strcat alles in argv rein. so kann ich argv[i] nicht mehr gescheit verwenden
-
Das darfst du auch nicht machen, denn du weißt ja nicht, wie viel Platz in
argv[i
] ist.
-
CStoll schrieb:
Dir ist schon klar, daß für den Zeiger buf die selben Scope-Regeln gelten wie für die Arrays im Eröffnungsbeitrag - sobald sie aus dem Gültigkeitsbereich fallen, ist ihr Wert futsch und damit auch der Speicher, den du per malloc() angefordert hast. Sowas nennt sich i.a. "Speicherleck".
Was willst du denn eigentlich mit dieser "datenstrucktur" erreichen? Das sieht so aus, als ob du möglicherweise zu kompliziert gedacht hast.
PS: gegen das "+1" sagt niemand etwas, aber das "sizeof(char)" ist redundant
also dann sollte ich ne fehlermeldung bekommen, wenn ich diesen speicherbereich weiter übergebe und benutze??? bis jetzt läuft es einwandfrei
-
maximillian schrieb:
cooky451 schrieb:
Startparameter noch mal zu kopieren scheint mir irgendwie ziemlich sinnlos. Sicher, dass du das nicht anders machen kannst? Was stellst du denn mit argv[i] böses an?
ich brauch ein paar ausführungen davon. denn beim
file = fopen(strcat(argv[i], ".txt"), "w+")
schreib strcat alles in argv rein. so kann ich argv[i] nicht mehr gescheit verwenden
Also für diese Aktion reicht der Platz aus deinem obigen malloc()-Aufruf aber definitiv auch nicht aus.
-
Irgendwie ist mir immer noch nicht klar was das werden soll. Erkläre doch einmal kurz was genau du erreichen willst bzw. was dein Programm macht, ich denke dann können wir dir sehr viel besser helfen.
-
DirkB schrieb:
Das darfst du auch nicht machen, denn du weißt ja nicht, wie viel Platz in
argv[i
] ist.das war bloß ein beispiel, ich reserviere da schon genug speicherplatz
-
ich brauch ein paar ausführungen davon. denn beim
file = fopen(strcat(argv[i], ".txt"), "w+")
schreib strcat alles in argv rein. so kann ich argv[i] nicht mehr gescheit verwenden
Dann mach doch sowas hier:
char filename[BIG_ENOUGH]; snprintf(filename, BIG_ENOUGH - 1, "%s.txt" argv[1]);
oder (leider nicht standardkonform);
char *filename = alloca(strlen(argv[1]) + 5); strcat(filename, ".txt");
alloca(int size) reserviert size-viele Bytes auf dem Stack, d.h. nach verlassen des Scopes wird es automatisch freigegeben.