1 / 6

Mäluhaldus vol3

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 .

emmett
Download Presentation

Mäluhaldus vol3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Mäluhaldus vol3 Realloc()

  2. 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.

  3. 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)

  4. 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; }

  5. 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)

  6. 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)?

More Related