60 likes | 179 Views
Mäluhaldus vol3. Realloc (). Realloc () tööpõhimõte. Realloc funktsioon lubab meil juba varasemalt allokeeritud mälu laiendada ja vähendada. Realloc töötab ka juhul, kui varemalt pole mälu allokeeritud .
E N D
Mäluhaldus vol3 Realloc()
Realloc() tööpõhimõte • Realloc funktsioon lubab meil juba varasemalt allokeeritud mälu laiendada ja vähendada. • Realloc töötab ka juhul, kui varemalt pole mälu allokeeritud. • Kui mälu suurendamine samas kohas ebaõnnestub, tagastatakse uue mälu asukoha pointer ja eelnevas mälus olevad andmed kopeeritakse ümber • Kui realloc ebaõnnestub, tagastatakse NULL-pointer. Juhul kui tegu oli juba olemasoleva mälupiirkonna laiendusega, jääb vana pointer kehtima.
realloc(); • Realloc() funktsiooni prototüüp:void* realloc (void* ptr, size_t size); • Tagastus tüüpi void* - viit „uuele“ mälualale • 1. parameeter ptr (void* tüüpi) – viit praegusele mälualale • 2. parameeter size (size_t tüüpi) – uus suurus • ptr=(int*)realloc(NULL, sizeof(int) * n) • ptr2 =(int*)realloc(ptr, sizeof(int) * n)
Näide #include <stdio.h> #include <malloc.h> intmain(void){ int*ptr2=NULL; int*ptr=(int*)malloc(sizeof(int)*100); printf("ptr = %p\n", ptr); ptr2=(int*)realloc(ptr, sizeof(int) * 80000000000); printf("ptr = %p\n", ptr); printf("ptr2 = %p\n", ptr2); free(ptr2); free(ptr); return 0; }
Mõned võimalused failist N kirje lugemiseks • 1. võimalus: rea kaupa lugemine jooksvalt mälu juurde küsides • Iga uue rea lugemisel suurendatakse allokeeritud mälu suurust realloc() funktsiooniga • 2. võimalus: eelnevalt faili suuruse tuvastusega • Kontrollida andmekogus failides (nt ridade kaupa) • Allokeerida mälu vastavalt leitud suurusele • Lugeda andmed mällu • 3. võimalus: rea kaupa lugemine üksteisega lingitud struktuuridesse • Struktuuridele mälu küsimine käib jooksvalt • Struktuurid leitakse üle viitade kaudu vastavalt nimistu ülesehitusele • Tekib linked list (tutvume lähinädalatel)
Tunnitöö • Lugeda failist N kirjet struktuuriga • Erakond (string) • Kandidaat (string) • Häälte arv (int) • Lähtefailis vähemalt 4 erakonda ja 15 kandidaati • Lugemisel allokeerida mälu realloc() funktsiooniga jooksvalt • Ära unusta kontrolle tegemast! • Leia mitu % häältest iga erakond sai • Leia poliitikud, kes said enam kui 5% koguhäältest • Kas mõni erakond jäi alla valimiskünnise (alla 5% koguhäältest)?