Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ - ΕΦΑΡΜΟΓΗ 3

Поделиться
HTML-код
  • Опубликовано: 16 ноя 2024

Комментарии • 17

  • @SteliosNtousios
    @SteliosNtousios 3 года назад +1

    Βάζοντας και εδώ SIZE 80 δεν καταλαβαίνω τι γλυτώνουμε σε δέσμευση μνήμης με τη malloc.
    Πάλι τον ίδιο χώρο δεν καταλαμβάνουμε στη μνήμη; Πάλι στατικό δεν είναι το SIZE?

    • @psounis
      @psounis  3 года назад +3

      Δεν γλιτώνουμε τίποτα απολύτως όντως. Είναι απλά για εξάσκηση-εμπέδωση επί της δυναμικής δέσμευσης μνήμης (η επανάληψη μήτηρ μαθήσεως)

  • @papaspike
    @papaspike 3 года назад

    Καλημέρα σας κύριε Ψούνη . Μου βγάζει ο compiler μήνυμα (για μέσα στη main) undefined reference to 'free_record' και error id returned 1 exit status... Θα μπορούσατε να μου εξηγήσετε αν έχω κάνει κάτι λάθος;

    • @psounis
      @psounis  3 года назад +1

      Καλησπέρα Σπύρο, πρέπει να υπάρχει κάποιο τυπογραφικό στη δήλωση της free_record. Δες και από εδώ τον κώδικα για αντιπαραβολή: github.com/psounis/C-programming/blob/master/lesson13/efarmogi3.c

    • @papaspike
      @papaspike 3 года назад

      @@psounis Θα το ελέγξω ευχαριστώ πολύ

  • @ΓιώργοςΤ-ε9τ
    @ΓιώργοςΤ-ε9τ 4 года назад

    Κ.Ψουνη αν στην init_record σαν ορισμα δεν βαλω δεικτη παλι δεν θα πιασει χωρο στην ραμ η εντολη μαλοκ?Ειναι αναγκαστικη δηλαδη η χρηση του δεικτη εδω?

    • @psounis
      @psounis  4 года назад

      Γιώργο, γράψε μου ακριβώς σε κώδικα την εκδοχή της init_record που σκέφτεσαι..

    • @ΓιώργοςΤ-ε9τ
      @ΓιώργοςΤ-ε9τ 4 года назад

      @@psounis Εννουσα στην init_record να περνουσα απεθειας το στιγμιοτυπο record και να εκανα μαλοκ.Εκανα debug και ειδα πως τελικα αυτος ο χωρος δεσμευεται τοπικα στη συναρτηση και οταν επιστρεψω στην main δεν υπαρχει αυτος ο χωρος.Οποτε η απορια λυθηκε.Οπως και να εχει ευχαριστω πολυ!Τα βιντεο σας ειναι παρα πολυ βοηθητικά και κατανοητά!!

  • @lifeisavideogame3383
    @lifeisavideogame3383 5 лет назад

    δε καταλαβαινω εχουμε τον ιδιο κωδικα και εμενα μου εφανιζει παντου λαθοι που δε μπορω να τα εξηγησω

    • @lifeisavideogame3383
      @lifeisavideogame3383 5 лет назад

      #include
      #include
      #define size 80
      struct stoixeia{

      char *onoma;
      char *diefthinsé;
      char *arithmos;
      char *nomos;
      };
      typedef struct stoixeia RECORD;
      void read_record(RECORD *p);
      void print_record(RECORD a);
      void init_record(RECORD *p);
      void free_record(x);
      main()
      {
      RECORD a,b;

      init_record(&a);
      init_record(&b);

      printf("dwse stoixeia 1ou atomou: ");
      read_record(&a);

      printf("
      dwse stoixeia 2ou atomou: ");
      read_record(&b);

      print_record(a);
      printf("
      ===============
      ");
      print_record(b);

      free_record(a);
      free_record(b);
      }
      void read_record(RECORD *p)
      {
      printf("
      dwse to onoma: ");
      scanf("%s",p->onoma);

      printf("
      dwse thn diefthinsi: ");
      scanf("%s",p->diefthinsi);

      printf("
      dwse to arithmos: ");
      scanf("%s",p->arithmos);

      printf("
      dwse nomo: ");
      scanf("%s",p->nomos);
      }
      void print_record(RECORD a)
      {
      printf("
      onoma:%s",a.onoma);
      printf("
      diefthinsi:%s",a.diefthinsi);
      printf("
      arithmos:%s",a.arithmos);
      printf("
      nomos:%s",a.nomos);
      }
      void init_record(RECORD *p)
      {
      p->onoma=malloc(sizeof(char)*size);

      if(!p->onoma)
      {
      printf("
      adunamia desmesushs mnhmhs");
      exit(0);
      }

      p->diefthisi=malloc(sizeof(char)*size);

      if(!p->diefthinsi)
      {
      printf("
      adunamia desmesushs mnhmhs");
      exit(0);
      }

      p->arithmos=malloc(sizeof(char)*size);

      if(!p->arithmos)
      {
      printf("
      adunamia desmesushs mnhmhs");
      exit(0);
      }

      p->nomos=malloc(sizeof(char)*size);

      if(!p->nomos)
      {
      printf("
      adunamia desmesushs mnhmhs");
      exit(0);
      }

      void free_record(x)
      {
      free(x.onoma);
      free(x.diefthinsi);
      free(x.arithmos);
      free(x.nomos);
      }
      }

    • @psounis
      @psounis  5 лет назад

      Κάποιο λαθάκι στην πληκτρολόγηση θα 'χεις. Τον κώδικα τον βρίσκεια και εδώ:
      github.com/psounis/C-programming

  • @iasonastsaousis282
    @iasonastsaousis282 Год назад

    #include
    #include
    struct person{
    char *name;
    char *address;
    char *number;
    char *county;
    };
    typedef struct person RECORD;
    void read_record(RECORD *r);
    void print_record(RECORD r);
    void clean_stdin(void);
    void create_string(char *string,int n);
    void destroy_string(char *string,int n);
    int main()
    {
    RECORD a;
    /*Allocating memory for the strings*/
    create_string(a.name,80);
    create_string(a.address,80);
    create_string(a.number,80);
    create_string(a.county,80);

    read_record(&a);
    print_record(a);
    destroy_string(a.name,80);
    destroy_string(a.address,80);
    destroy_string(a.number,80);
    destroy_string(a.county,80);
    }
    void read_record(RECORD *r)
    {

    printf("
    Give the name: ");
    scanf("%s",r->name);
    clean_stdin();
    printf("
    Give the address: ");
    scanf("%s",r->address);
    clean_stdin();
    printf("
    Give the number: ");
    scanf("%s",r->number);
    clean_stdin();
    printf("
    Give the county: ");
    scanf("%s",r->county);
    }
    void print_record(RECORD x)
    {
    printf("
    RECORD
    ==============
    ");
    printf("Name: %s
    ",x.name);
    printf("Address: %s
    ",x.address);
    printf("Number: %s
    ",x.number);
    printf("County: %s
    ",x.county);
    }
    void clean_stdin(void)
    {
    int c;
    do {
    c = getchar();
    } while (c != '
    ' && c != EOF);
    }
    void create_string(char *string,int n)
    {
    string=malloc(sizeof(char)*n);
    if(!string)
    {
    printf("Failed allocating memory.");
    exit(0);
    }
    }
    void destroy_string(char *string,int n)
    {
    free(string);
    }
    μου βγαζει ως αποτελεσμα:
    RECORD
    ==============
    Name: (null)
    Address: (null)
    Number: (null)
    County: (null)
    για ποιον λογο δεν δουλευει??

    • @psounis
      @psounis  Год назад

      Στην create_string: διοχετεύεις σαν όρισμα έναν δείκτη σε συμβολοσειρά, αλλά ωστόσο θέλεις η αλλαγή που κάνεις σε αυτόν τον δείκτη να διατηρείται και μετά το πέρας της συνάρτησης
      * Πρέπει να περάσεις λοιπόν τη διεύθυνση του δείκτη (αλλιώς δείκτη σε δείκτη), π.χ:
      void create_string(char **string,int n)
      {
      *string=(char *)malloc(sizeof(char)*n);
      if(!string)
      {
      printf("Failed allocating memory.");
      exit(0);
      }
      }
      κληση:
      create_string(&a.name,80);