[C] - Errore Allocazione Memoria

di il
1 risposte

[C] - Errore Allocazione Memoria

Questo è il mio codice:

dati.c
#include "dati.h"

struct dato {
	double valore;
	unsigned classe;
};

extern struct dato *read_dati(const char *filename, unsigned int *pn) {
	FILE *f;
	f = fopen(filename, "r");
	if (f == NULL) {
		exit(1);
	}

	char a[100];
	unsigned int y = 0;

	struct dato *asd;
	asd = malloc(0);
	for (int i = 1; ; i++) {
		if (feof(f)) {/*controlla fine file*/
			break;
		}
		/*altrimenti continua*/
		fgets(a, 7, f);

		realloc(asd, sizeof(struct dato) * i);

		asd[i-1].valore = atof(a);
		fgets(a, 10, f);
		asd[i-1].classe = atoi(a);

		a[0] = '\0';
		y++;
	}

	pn = &y;
	fclose(f);
	return asd;
}
Il mio problema è collocato nella righa:
"realloc(asd, sizeof(struct dato) * i);"
Non riesco a capire come mai non vada bene quello che ho scritto.
Il problema mi chiede di passare alla funzione il nome di un file da aprire in modalita lettura e salvare in (*pn)[altra variabile passata alla funzione] il numero di righe lette dal file.
Infine la funzione deve ritornare un puntatore ad una zona di memoria (allocata dinamicamente nell'heap) contenente tutti i dati letti nel file.

Ho deciso di utilizzare un realloc perche non so quante righe devo riportare nell'array struct dato asd, e quindi decido di allocare memoria ad ogni righa, fino a quando non arrivo a EOF
Potreste spiegarmi perchè mi mostra quell'errore? Grazie

ps. Appena provo a testare il programma mi mostra "Esame 2.4.exe has triggered a breakpoint."

1 Risposte

  • Re: [C] - Errore Allocazione Memoria

    La realloc si usa come la malloc ... Devi assegnare il puntatore restituito

    asd = realloc(...)

    Consulta la documentazione prima di usare una funzione
Devi accedere o registrarti per scrivere nel forum
1 risposte