Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12 - ΔΥΝΑΜΙΚΗ ΔΕΣΜΕΥΣΗ ΜΝΗΜΗΣ - ΕΦΑΡΜΟΓΗ 4

Поділитися
Вставка
  • Опубліковано 25 січ 2025

КОМЕНТАРІ • 16

  • @emmam8141
    @emmam8141 3 роки тому

    πως θα μπορούσαμε να κάνουμε ένα παρόμοιο πρόγραμμα όπου όμως να μην έχει από την αρχή προκαθορισμένο αριθμό λέξεων που εισάγει ο χρήστης;

    • @psounis
      @psounis  3 роки тому

      Όπως αναφέρεται σε βίντεο της θεωρίας, μπορείς να κάνεις δέσμευση πίνακα από δείκτες και να προχωρήσεις αναλόγως. Εν προκειμένω, θα έπρεπε οι δείκτες να είναι char *, αφού θες πίνακα από συμβολοσειρές, αντί για πίνακα από int * που έχει το παράδειγμα του ua-cam.com/video/K_GXeTL5cbE/v-deo.html

    • @emmam8141
      @emmam8141 3 роки тому +1

      @@psounis ευχαριστω πολυ

  • @iasonastsaousis282
    @iasonastsaousis282 2 роки тому

    Καλησπερα , το char *pinakas[10] ειναι το ιδιο με το char **pinakas και pinakas=malloc(sizeof(char *)*10)? και τα δυο ουσιαστικα στην μνημη 10 διαδοχικες θεσεις στην μνημη με αποθηκευμενα char pointers δεν ειναι? διοτι την προσπαθησα την ασκηση και την εκανα οπως διαχειριστηκαμε τους πινακες
    #include
    #include
    #include
    #define N 10
    int check_string(char *string);
    int main()
    {
    char **Strings;
    char buffer[100];
    int i,length;
    Strings=malloc(sizeof(char *)*N); //made an array with 10 strings
    if(!Strings)
    {
    printf("
    Couldn't allocate memory!
    ");
    exit(0);
    }
    for(i=0; i '\0'
    if(!Strings[i])
    {
    printf("
    Couldn't allocate memory!
    ");
    exit(0);
    }
    /*Copying users string in the array*/
    strcpy(Strings[i],buffer);
    }
    printf("
    The words you gave were:
    ");
    for(i=0; i

    • @psounis
      @psounis  2 роки тому +1

      Ναι σωστά, το ένα κάνει στατική και το άλλο δυναμική δέσμευση του ίδιου πράγματος.

  • @gammyhorse
    @gammyhorse 4 роки тому +1

    Μου βγάζει αυτό το output. Δε μπορώ να καταλάβω γιατί...
    Simvoloseira: `h¿
    Simvoloseira: `h¿
    Simvoloseira: `h¿
    Simvoloseira: `h¿
    Simvoloseira: `h¿
    Simvoloseira: `h¿
    Simvoloseira: `h¿
    Simvoloseira: `h¿
    Simvoloseira: `h¿
    Simvoloseira: `h¿

    • @psounis
      @psounis  4 роки тому +2

      Ναι έχεις δίκιο, εδώ πάλι έγινε το λάθος της μη αρχικοποιήσης της i στην mystrcopy με αποτέλεσμα να μη βγάζει σωστό αποτέλεσμα. Επίσης το Dev την αρχικοποίησε σε 0 και με ξεγέλασε ;-)
      Το σωστό είναι:
      char *mystrcpy(char *dest, char *src)
      {
      int i=0;
      while (1)
      {
      dest[i]=src[i];
      if (src[i]=='\0')
      break;
      i++;
      }
      return dest;
      }

    • @psounis
      @psounis  4 роки тому +2

      Ανέβασα και τη διόρθωση στο github.

    • @gammyhorse
      @gammyhorse 4 роки тому +1

      @@psounis Σας ευχαριστώ πολύ. Αν και θα έπρεπε να το είχα αντιληφθεί και από μόνος μου αυτό το λάθος.

  • @chrysavt2007
    @chrysavt2007 4 роки тому

    Καλησπέρα. Δηλαδή απο ότι καταλαβαίνω δυναμική δέσμευση μνήμης για είσαγωγή συμβολοσειράς δεν γίνεται χωρίς την χρήση του πίνακα buffer?γίνεται δηλαδή το pc να διαβάζει μία συμβολοσειρά και ανάλογα το μήκος της να δεσμευει χώρο χωρίς κάποιο άλλο ενδιάμεσο πίνακα και να την αποθηκευει?

    • @psounis
      @psounis  4 роки тому +4

      Μπορείς να κάνεις κάτι καλύτερο με χρήση της συνάρτησης realloc που θα δεις στο μάθημα 21.
      Στην ουσία αυξάνεις το χώρο μνήμης που έχει ο πίνακας όσο διαβάζεις χαρακτήρες.
      Όταν φτάσεις στο μάθημα αυτό έχει αυτόν το σύνδεσμο σαν αναφορά:
      stackoverflow.com/questions/16870485/how-can-i-read-an-input-string-of-unknown-length

    • @chrysavt2007
      @chrysavt2007 4 роки тому +1

      @@psounis ευχαριστώ πάρα πολύ για την απάντηση θα το κοιτάξω!

  • @Makarios_Holesis
    @Makarios_Holesis 3 роки тому

    Καλησπέρα δάσκαλε, έχω κάνει την εφαργμογή αύτη λίγο διαφορετικά αλλά είναι εξίσου λειτουργική. Για να να είμαι 100% σίγουρος, υπάρχει τρόπος να κάνω printf την μνήμη που δέσμευσα δυναμικά , δηλαδή να μου βγάλει τον αριθμό των bytes που δέσμευσε η malloc για την εκάστοτε λέξη; Ευχαριστώ.

    • @psounis
      @psounis  3 роки тому +1

      Από τη στιγμή που δε σου επέστρεψε NULL όλα έχουν πάει καλά, δεν έχεις κάποιο λόγο να ανησυχείς.
      Περαιτέρω για να το ψάξεις, θα μπλεχτείς με πολλές λεπτομέρειες μιας και δεσμεύονται και άλλα μπινελίκια και δεν έχει τύχει να το αναζητήσω. Μια καλή αφετηρία ίσως είναι αυτή η σελίδα: stackoverflow.com/questions/28735770/how-to-get-the-size-of-the-memory-allocated-dynamically

  • @romanosspiropulos2751
    @romanosspiropulos2751 4 роки тому

    Δημήτρη, καλησπέρα! Τα μαθήματα 11 και 12 δεν παίζουν!

    • @psounis
      @psounis  4 роки тому +8

      Θα είχε ψυχολογικά το yt!