dynamisches Array
-
Hallo, folgende Frage:
Wenn ich einen String einlese und die einzelnen Worte in ein dynamisches Array schreiben möchte, versuche ich das so:
Ein Array in der Mainfunktion mit: tokens[Satz][Wort][Buchstabe]: char***tokens;
Ich zähle wieviele Sätze mein Text hat mit: count_length = 0;Dann rufe ich meine Funktion mit:
tokens = get_all(tokens,&count_length);
auf.
Funktion get all:
char***get_all(char***tokens,int*count_length) { FILE*fp; int count = *count_length; char s[255],s2[50]; if((fp=fopen("src.txt","rt"))==0) { printf("CAN'T OPEN FILE! ABORTING"); exit(1); } else { while(fgets(s,100,fp)!=NULL) { tokens = get_tokens(s,tokens,count); count++; } fclose(fp); } *count_token_length = count; return tokens; }
Für die einzelnen Worte:
char***get_tokens(char s[100],char***tokens,int count_length) { int i,l = strlen(s)-3; int count = 0,count2 = 0; char sub[255]; tokens[count_token_length] = (char**)realloc(tokens[count_length],sizeof(char*)); for(i=0;i<l;i++) { if(s[i]==' ') { i++; sub[count] = '\0'; count = -1; tokens[count_token_length][count2++]=(char*)realloc(tokens[count_length][count2++],strlen(sub)*sizeof(char*)); tokens[count_length][count2++] = sub; } else sub[count] = s[i]; count++; } sub[count] = '\0'; tokens[count_token_length][count2++]=(char*)realloc(tokens[count_length][count2++],strlen(sub)*sizeof(char*)); tokens[count_length][count2++] = sub; return tokens; }
Ungünstigerweise kriege ich da ein Core dumped. Woran liegts?
-
Die Fehlermeldung bezieht sich auf das Schreiben ins Array tokens in get_tokens().
-
wenn du nur eine dimension in der funktion verwendest, warum übergibst du den index und das gesamte 3-dim array?
wie wärs, wenn du die funktion noch einmal neu schreibst? (diesmal nicht so umständlich) - dann sind fehler leichter erkennbar.
TIPP.: schau dir mal die "realloc" an... castoperator (char*) --> du solltest im realloc sizeof(char) nehmen, also kannst du das weglassen, weil das immer 1 ist.
mfg (c)h