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 00 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);
}