Q:

Dynamic memory allocation for structure, but what about its int or double members

I will be very thankful for looking at my code and telling me whether if I create a structure for which I am dynamically allocating memory, should I dynamically allocate memory also for the structure's elements that are int or double? 
As it can be seen in the example below, I use malloc only for those elements of the structure which size can change, namely strings. I tried to use malloc for int or double variables (elements of the structure), but everything worked fine until I tried to use the function printf on them. 
It refused to work because printf("%d", [structure]->[int element]) was not correct.
So I changed the code and int and double structure members are processed with the malloc and realloc functions. Is this approach correct? 
Would it be expected and even possible to use malloc and realloc for int or double structure members/elements? How to use printf on them later on?
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define LICZBA 2
#define SIZE 256

typedef struct ksiazka{
   char * imie;
   char * nazwisko;
   char * tytul;
   int numerkat;
   double cena;
}rekord;

rekord * rekordnew(){
   rekord *r;
   r=malloc(sizeof(rekord));
   r->imie=NULL;
   r->nazwisko=NULL;
   r->tytul=NULL;
   r->numerkat=0;
   r->cena=0;
   return r;
}

void rekordfree(rekord *r){
   if (r->imie) free (r->imie);
   if (r->nazwisko) free (r-> nazwisko);
   if (r-> tytul) free (r-> tytul);
   //if (r-> numerkat) free (r->numerkat);
   //if (r-> cena) free (r-> cena); 
   free (r);
}

void wpiszimie(rekord *pr, char im[SIZE]){
   (*pr).imie=realloc(pr->imie, strlen(im)+1);
   strcpy(pr->imie, im);
}

void wpisznazwisko(rekord *pr, char nazw[SIZE]){
   pr->nazwisko=realloc(pr->nazwisko, strlen(nazw)+1);
   strcpy(pr->nazwisko, nazw);
}

void wpisztytul(rekord *pr, char tyt[SIZE]){
   pr->tytul=realloc(pr->tytul, strlen(tyt)+1);
   strcpy(pr->tytul, tyt);
}

void wpisznumerkat(rekord *pr, int numer){
 //  pr->numerkat=realloc(pr->numerkat, sizeof(int));
   pr->numerkat=numer;
}

void wpiszcena(rekord *pr, double cen){
 //  pr->cena=realloc(pr->cena,sizeof(double));
   pr->cena=cen;
}

int main(){
  rekord *r[LICZBA];
  char bufor[SIZE];
  int i, number;
  double number2;

  for(i=0;i<LICZBA;i++){
     r[i]=rekordnew();
  }

  for(i=0;i<LICZBA;i++){
    printf("Podaj tytuł książki");
    scanf("%s", bufor);
    wpisztytul(r[i],bufor);
    printf("Podaj imię autora książki");
    if (scanf("%s", bufor)==1)wpiszimie(r[i],bufor);
    printf("Podaj nazwisko autora książki");
    if (scanf("%s", bufor)==1)wpisznazwisko(r[i],bufor);
    printf("Podaj numer katalogowy książki");
    if (scanf("%d", &number)==1)wpisznumerkat(r[i],number);
    printf("Podaj cenę książki");
    if (scanf("%lf", &number2)==1)wpiszcena(r[i],number2);
    }

    for(i=0;i<LICZBA;i++){
    printf("Tytuł książki");
    printf("%s", r[i]->tytul);
    printf("Imię autora książki");
    printf("%s", r[i]->imie);
    printf("Nazwisko autora książki");
    printf("%s", r[i]->nazwisko);
    printf("Numer katalogowy książki");
    printf("%d", r[i]->numerkat);
    printf("Cena książki");
    printf("%lf", r[i]->cena);

  } 
 return 0;
}

A:

I cannot see any severe errors in your code though reasoning about it would be easier for me if you had written it in English.
As you do malloc(sizeof(rekord)) you allocate memory to hold all members of a rekord.  That is three char * pointers, an int and a double.  You can write to those members immediately, no further allocation is needed.  Of course, writing to a char * member is not really useful unless you are assigning it a pointer to some char buffer which you'd in turn obtain via malloc.  For the int and double this is neither needed nor possible.  So your code is correct here.
A few minor remarks, though:

You should check the return value of malloc.  If it fails, it will return NULL.  You should check for this (rare) event and handle the error if it happens.  Usually, terminating the program will be an appropriate action.
You forgot to call rekordfree at the end.
Using non-ASCII characters in your program source code may or may not work.  It should be avoided in portable programs.
Your use of scanf for reading in the strings is a potential security hole as it might overrun the input buffer.  Since you are going to store the string in a malloc()ed buffer anyway, I suggest you use getline as a convenient and safe alternative.
Consider adding more whitespace to your output (eg newlines via \n).  I guess that even if I understood the language, the output wouldn't be very easy to read as it's all on one line.  Printing a space or a tab (\t) at the end of the input prompts might also help improve the user experience.

