Hi, On Wed, 16 Apr 2003, Georg Wagner wrote:
int getAnz(void) { int i; char **array; array = (char*)malloc (sizeof(char*));
Hier allozierst du Platz fuer genau einen Pointer, also fuer array[0]. Ok soweit. Allerdings castest du den Rueckgabewert falsch. array hat Typ "char **", nicht "char *".
array[0] = (char) malloc (sizeof (char)*100);
wieder falscher cast. array[0] hat Typ "char *", nicht "char".
while (getinput) { array = (char*)realloc (array, sizeof (char*));
Und hier allozierst du Platz fuer wieder nur einen Pointer, also array[0] ;-)
array[i] = (char)realloc (array, sizeof (char*100);
Weswegen dieser Zugriff fuer i!=0 dann ins Nirvana schreibt. Ausserdem hast du als ersten Parameter fuer realloc() "array" angegeben. Das willst du hier allerdings gar nicht vergroessern (hast du ja ne Zeile drueber schon, wenns korrekt gewesen waere), sondern du willst "array[i]" vergroessern. Allerdings willst du es gar nicht vergroessern, sonder neu anlegen, also nimmst du malloc(), nicht realloc().
i++; strcpy(array[i], input);
Und hier schreibst du in array[i], hast allerdings in der Zwischenzeit 'i' schon erhoeht, schreibst also in uninitialisierten Speicher. Was du willst ist eine Schleife der Art: int i = 0; array = (char **) malloc (sizeof (char *)); while (getinput) { array = (char **) realloc (array, (i+1) * sizeof (char *)); array[i] = (char *) malloc (100 * sizeof(char)); strcpy (array[i], input); i++; } Ciao, Micha.