estructura de realloc con función en c

Mi progtwig de C está fallando y soy demasiado nuevo para averiguarlo. Es muy simple hasta ahora y me imagino que el código es suficiente para descubrir qué está mal.

Simplemente estoy tratando de leer un archivo línea por línea. Doblaré la memoria de una estructura una vez que me quede sin memoria. Si esto no es suficiente información, le daré todo lo que necesite.

Muchas gracias por cualquier ayuda, ya que he estado atrapado por horas ahora.

/* John Maynard 1000916794 7/15/2013 HW-06 */ #include  #include  #include  #define N 100 struct course { char subject[11]; int catalogNum; int sectionNum; int enrollmentTotal; int enrollmentCap; }; void readFile(struct course *d, char* filename); void double_array_size(struct course *d, int new_size); int main(void) { char *filename = "hw06-data.csv"; struct course *d; d = malloc( N * sizeof(struct course)); readFile(d, filename); } void readFile(struct course *d, char* filename) { FILE* fp; char buffer[100]; int i = 0, array_size = 100; struct course *temp; if( ( fp = fopen(filename, "r") ) == NULL) { printf("Unabale to open %s.\n", filename); exit(1); } fgets(buffer, sizeof(buffer), fp); while( fgets(buffer, sizeof(buffer), fp) != NULL) { if (i == array_size) { array_size *= 2; double_array_size(d, array_size); printf("reached limit...increasing array to %d structures\n", array_size); } i++; } fclose( fp ); } void double_array_size(struct course *d, int new_size) { struct course *temp; temp = realloc(d, new_size * sizeof(struct course)); if(temp == NULL) { printf("unable to reallocate\n"); exit(1); } else d = temp; } 

realloc() puede devolver un puntero diferente al original, pero asigna eso a temp solo para que la función de llamada aún funcione con el puntero original después. Cambie double_array_size() para devolver el nuevo puntero devuelto por realloc() y llamar

 d = double_array_size(d, array_size); 

Además, siempre debe verificar el resultado para malloc() , realloc() etc. Pueden devolver NULL si no hay más memoria disponible

Combinando las respuestas de Ingo y codroipo, debe devolver el nuevo puntero desde double_array_size o pasar un puntero a d para poder actualizar el puntero desde double_array_size

Realloc reasigna la memoria, por lo que probablemente la memoria apuntada por d se liberará, por lo que double_array_size tiene que editar d, puedes intentar:

 void double_array_size(struct course** d, int new_size){ *d = realloc(*d, new_size * sizeof(struct course)); . . . }