zeiger auf array



  • hallo.

    ich wette das ist eine standardfrage, aber da die suchfunktion deaktiviert ist, schreibe ich sie ein weiteres mal ins forum.
    warum liefert mir folgendes einen segmentation fault?

    int j, i, n = 0;
    	int (*frqs)[2];
    
    	frqs = malloc(n*2*sizeof(int));
    
    	for (i = 0; i < n; i++) {
    		fscanf(fp, "%d %d", *(*(frqs+i)+0), *(*(frqs+i)+1));
    	}
    

    will ich ein array[i][2] fuellen - aber eben ueber einen zeiger. ich weiss, ich kann das array auch direkt deklarieren, aber erstens moechte ich ein dynamisches array deklarieren und zweitens wissen, wieso der obere code einen fehler enthaetl. vielen dank im Vorraus.

    Gruss caspar



  • Also dazu kann ich so nix sagen, der Code krankt allein beim Draufgucken an mehreren Stellen:

    - der FILE-Zeiger fehlt
    - die For-Schleife wird niemals ausgeführt, da die Bedingung von vorneherein unwahr ist...

    Außerdem weisst du ja im Vorfeld gar nicht, wie viele Daten in der Datei stehen sollen, deswegen isses immer etwas schwierig, das direkt anzugeben (n=0 ergibt ja sowieso keinen Sinn, s. o.).



  • int (*frqs)[2];

    ist ein array von pointern, für die kein Speicherplatz reserviert werden muss!
    also ist

    frqs = malloc(n*2*sizeof(int));

    sinnlos!



  • entschuldigt, ich habe ein paar «...» im sourcecode vergessen, so sieht der original code aus

    void plyfle(char *fle) {
    
    	FILE *fp;
    	int j, i, n = 0;
    	int (*frqs)[2];
    
    	if ( (fp = fopen(fle, "r")) <= 0)
    		printf("can't open %s\n", fle);
    
    	fscanf(fp, "%d", &n);	
    	if (!n) 
    		printf("your file is wrong formated\n");
    
    	frqs = malloc(n*2*sizeof(int));
    
    	for (i = 0; i < n; i++) {
    		fscanf(fp, "%d %d", *(*(frqs+i)+0), *(*(frqs+i)+1));
    	}
    
    }
    

    nebenbei habe ich den fehler gefunden:

    ...
    int (*frqs)[2]
    /*siehe oben*/
    ...
    	for (i = 0; i < 6; i++) {
    		fscanf(fp, "%d %d", (*(frqs+i)+0), (*(frqs+i)+1));
    	}
    

    ja, frq ist ein array von zeigern, kann aber auch ueber inizes auf die werte zugegriffen wernden (oder nicht?). meine schuld - problemschilderung war unzureichend.

    Gruss caspar


Anmelden zum Antworten