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


Anmelden zum Antworten