Manuelle og semi-automatiske strategier for identitetsstyring virker - lige indtil nogen beder om dokumentation. For at undgå denne fare har DKTV taget kontrol over sin identitets- og adgangsstrategi.
Hvad er current? Hvor kommer den fra? Er det en hægtet liste, du har som en eller anden global variabel? (fy fy!) Hvor bliver de allokerede variable slettet?
void LoadStudents () { FILE *myfile; if ((myfile = fopen (\"c:\\\\students.dat\", \"rb\")) == NULL) return; // filen kunne ikke åbnes do { current->next = allocatestudent(); current = current->next; } while (fread(current, sizeof (struct student), 1, myfile) != 0); free (current); current = NULL; fclose (myfile); }
Jeg troede først at det var C++, men kan nu se at det er god gammeldags C - så du bruger sfølli malloc og free...
...jeg vil dog råde dig til at lave funktionen så den tager slutningen af listen (din current) som en referenceparameter, globale variable er noget snavs fordi det nemt kan blive svært at overskue hvilke funktioner kan ændre på dem.
Fatter minus af det her... hvorfor er funktionen ikke lavet som en medlemsfunktion i klassen student (og tager en FILE* paramater) eller som en fri funktion, der returnerer en hægtet liste med student-objekter?
void LoadStudents (student &*pSidste) { FILE *myfile; student stud; if ((myfile = fopen(\"c:\\\\students.dat\", \"rb\")) == NULL) return; // filen kunne ikke åbnes while (fread(&stud, sizeof(student), 1, myfile) != 0) { pSidste = new student(stud); pSidste = pSidste->next; } pSidste = NULL; fclose (myfile); }
dette forudsætter at du enten har en copy-constructor til student, men det har du jo selføllig automatisk hvis du er ligeglad med om pointer-variable bliver kopieret med.
...eller at dit objekt kan kopieres ved bytevis kopiering (og det kan det vist siden du kan indlæse det fra fil med fread)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.