Riešenia
Úloha 1
Stačí použiť operátor sizeof napr.
printf("%d", sizeof(int));
Úloha 2
Uvedieme jedno z dvoch možných riešení (chyba je prečiarknutá): void main(void)
{
p = (Tovar*)malloc(sizeof(Tovar));
q = (Tovar*)malloc(sizeof(Tovar));
scanf("%s %f", p->nazov, p->cena);
p = (Tovar*)malloc(sizeof(Tovar)); stratili by sme prístup k vloženým údajom!
q = p; *q = *p; skopírujeme obsah premennej p do q
free((void*)p); teraz už môžeme dynamickú premennú p zrušiť
p = NULL;
printf("%s %f", q->nazov, q->cena); výstup
free((void*)q);
q = NULL;
}
Úloha 3
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
char *p, *q ;
unsigned long i, D, H;
*q = (char*)malloc(1000); /* alokujeme pamäť z heapu - experimentovanie */
D = 1; /* dolná hranica D*10 = 10 B */
H = 100000000; /* horná hranica H*10 = 1 000 000 000 B */
while (H - D > 1) {
i = (D + H) / 2;
if ((p = (char*)malloc(10*i)) != NULL) {
free((void*)p);
p = NULL;
D = i;
} else H = i;
}
printf("\n v heape je volnych priblizne %ld bajtov", H * 10);
free((void*)q);
}
|