[C] Run Failed mit strcat Funktion

tobi100

Cadet 4th Year
Registriert
Dez. 2008
Beiträge
69
Hallo Community,

ich habe nach längerer Zeit wieder mit der Programmiersprache C angefangen und habe folgendes Problem bei diesem Code.
Bei der strcat Funktion stützt mir das Programm ab (Run Failed) und ich habe keine Ahnung, was ich falsch gemacht habe. Wenn ich die Zeile auskommentiere, funktioniert es. Ich möchte mit dem Programm aus einem Char*-Array 50 mal die Konkatenation von testStringArray und temp ausgeben, das das i in Char* Form bekommt.
Hat jemand eine Idee? Vielen Dank im Vorraus.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
*
*/
int main(int argc, char** argv) {


char** testStringArray;

testStringArray = (char*) malloc(sizeof(char*) * 10);
int i;
for (i = 0; i < 50; i++)
{
testStringArray = malloc (sizeof(char) * 20);
}

for (i = 0; i < 50; i++)
{
testStringArray = "test";
char* temp = (char*) malloc (sizeof(char) * 3);
sprintf(temp, "%d", i);
printf("%s\n", temp);
strcat(testStringArray, temp); //wenn man diese Zeile auskommentiert,
//funktioniert das Programm
printf("%s\n", testStringArray);
free(temp);
}

return (EXIT_SUCCESS);
}
 
Was genau passiert wenn es "nicht funktioniert"?

PS: du allokierst sinnlos massenhaft Speicher ohne ihn wieder freizugeben.

PPS: stell deinen Code in
PHP:
[CODE][/CODE]
Blöcke, ist leichter zu lesen.
 
Vielleicht weil dein malloc nur 10 Zeiger anlegt?

Und bevor ich über sinnlose Allokationen reden würde, frage ich mich, ob ich den Sinn des Algorithmus verstanden hat... vielleicht wäre eine "So soll die Ausgabe aussehen"-Beschreibung ganz gut...

Und freigeben, das macht im Notfall ja das Betriebssystem. Kein guter Stil, ja, aber da finde ich andere Stil-Mängel gravierender. Z.B. dass numerische statt symbolischen Konstanten verwendet werden... damit wäre das Problem nämlich nicht passiert.
 
Zuletzt bearbeitet:
Du allokierst 10 * (char*), greifst dann aber ausgehend von diesem Pointer auf die Stellen 0 bis 49 zu - merkste was?
 
tobi100 schrieb:
Bei der strcat Funktion stützt mir das Programm ab (Run Failed) und ich habe keine Ahnung, was ich falsch gemacht habe.

Hast du schon mal das Wort "Debugger" gehört? Ich habe mir flüstern lassen, dass die manchmal ganz nützlich sein können. ;) Das erste, was ein Programmierer tun sollte, wenn sein Programm unerwartet Blödsinn treibt, ist versuchen, zu verstehen wieso. Das zweite (wenn der erste Schritt nicht zum Erfolg geführt hat) ist, einen Debugger anzuschmeissen und das Programm einfach mal durchlaufen zu lassen. Das Handhaben eines Debuggers ist zwar mit einem gewissen Lernaufwand verbunden, aber über kurz oder lang wirst du da eh nicht umhinkommen, und glaub mir ... Debugger können dir das Leben ungemein erleichtern.
 
Hier würde vermutlich schon ausreichen, sich die Kommandozeilenausgaben anzuschauen...
 
Zurück
Oben