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