Realloc in Unterfunktion



  • Hallo,

    bin neu hier im Forum um brauche euere Hilfe. Bin gerade dabei C zu lernen. Nun stehe ich vor einem Problem und komme einfach nicht weiter.
    Ich habe eine Liste von Artikel aus der Kommandozeile eingelesen. Diese dann in einen anderen Zeiger gespeichert. Nun will ich Argumente suchen und löschen. Nach dem löschen will ich einen realloc mit der neuen Anzahl an Argumenten machen. Also Anzahl-1. Das geht auch 2 mal gut. Doch beim 3. mal löschen bringt er eine Speicherschutzverletzung direkt nach dem realloc (habe debuggt).
    Hier mal der Code

    void loeschen(char ***argpointer, int *anzahl)
    {
    	int index=0;
    	char best;
    	char *ptr;
    	int i, j;
    
    	printf("Welcher Artikel soll gelöscht werden?\n");
    	index=pruefen(*argpointer, *anzahl);
    
    	if(index>0)
    	{
    	free(argpointer[0][index]);
    
    	for(;index<*anzahl;index++)
    	argpointer[0][index]=argpointer[0][index+1];
    
    	*anzahl=*anzahl-1;
    	 *argpointer=(char **)realloc(*argpointer, *anzahl*sizeof(char *));   
    	}
    
    }
    
    und hier noch der Code von der Funktion pruefen
    
    int pruefen(char **argumente, int anzahl)
    {
    	int i;
    	int j;
    	char *gefunden=NULL;
    	char suche[30];
    
    	printf("Artikel eingeben: ");
    	fflush(stdin);
    	scanf("%s", suche);
    
    	for(i=0; i<anzahl && gefunden == NULL; i++)
    	gefunden=strstr(argumente[i], suche);
    
    	if(gefunden != NULL)
    	    return (i-1);
    	else
    	    return 0;
    }
    

    Hoffe ihr könnt mir helfen. Ich weiß echt nicht weiter...
    Viele Grüße



  • Hallo,
    willst du die Argumente, die über den main-Funktionsparameter char *argv[]
    ins Programm kommen ?
    Die kannst du nicht löschen.
    Ignorier einfach die Argumente, die du nicht brauchst.



  • In C gibt es keine Unterfunktionen.

    Also sowas wie

    int main() {
      int unterFunktion() {
        ...
      }
      ..
    }
    

    gibt es nicht! 😞



  • Javaner schrieb:

    In C gibt es keine Unterfunktionen.

    gcc kann nested functions als erweiterung.
    🙂



  • So habe jetzt mein Problem lösen können..
    es lag ganz einfach an der Übergabe an die Funktion. Habe statt einen Call by Referenz einen Call by Value übergeben...
    Klar das es dann nicht geht. 😕

    Viele Grüße


Anmelden zum Antworten