====Tajni chat==== Zastavica će se ispisati ako vrijedi uvjet (status->odobren && status->moze_citati_flag). Potrebno je preplaviti status i postaviti ga na ispravne vrijednosti. Jedini unos je preko scanf-a: scanf("%10s",popis_pozivatelja[i].ime); scanf("%10s",popis_pozivatelja[i].kontakt); Objekt status nalazi se iza popis_pozivatelja. Unos scanf-a ograničen je iteracijom po broju pozivatelja: for(long long i=0; i 0) //Dakle broj pozivatelja ne smije biti negativan Potrebno je napraviti overflow na način da iteracija omogućuje veći ispis po gomili od veličine popis_pozivatelja: long long broj_pozivatelja; //qword (8 bajtova/64 bita) 2^64 = 18,446,744,073,709,551,616 različitih vrijednosti: *U unsigned notaciji: [0, 18 446 744 073 709 551 615] *U signed notaciji : [-9 223 372 036 854 775 808, 9 223 372 036 854 775 807] Veličina popis_pozivatelja je određena s: broj_pozivatelja * sizeof(struct pozivatelj) Sizeof je operacija koja vraća tip size_t (unsigned int) i u ovom slučaju to će biti vrijednost 20 (10 char + 10 char gdje je char riječ definirana kao byte) Broj_pozivatelja je long long Rezultat množenja je tip long long (implicit casting - uvijek se upcasta na najkompleksniji operand u operaciji npr. float*long *int *short = float). Kako bi se izveo overflow na razini registra koji čuva vrijednost umnoška potrebno je unijeti vrijednost za broj_pozivatelja na načina da je rezultat veći od 2^64 jer: Broj_pozivatelja*sizeof(struct pozivatelj) = (broj_pozivatelja*sizeof (struct pozivatelj) ) % 2^64 = (broj_pozivatelja*20)%2^64 2^64 / 20 =  922337203685477581 kada se zaokruži na gornju granicu. Time je ostatak 4 unutar malloc-a. Naravno, moguće je izvesti overflow i s drukčijim brojevima. ----- Rješenje je dakle: -Unos_1: 922337203685477581 -Unos_2: Unos stringa do adrese status i preplavljivanje varijable moze_citati_flag {{tajnichat.png}}