• Downloads
  • ! Read Me !
  • Μαθήματα
  • Φοιτητικά
  • Τεχνικά Θέματα
  • Συζητήσεις
  • Happy Hour!
  • About THMMY.gr
 V  < 
Search:  
Welcome, Guest. Please login or register.
November 03, 2025, 18:21:45 pm

Login with username, password and session length
Links
  Thmmy.gr portal
   Forum
   Downloads
   Ενεργ. Λογαριασμού
   Επικοινωνία
  
  Χρήσιμα links
   Σελίδα τμήματος
   Βιβλιοθήκη Τμήματος
   Elearning
   Φοιτητικά fora
   Πρόγραμμα Λέσχης
   Πρακτική Άσκηση
   Ηλεκτρονική Εξυπηρέτηση Φοιτητών
   Διανομή Συγγραμμάτων
   Ψηφιακό Καταθετήριο Διπλωματικών
   Πληροφορίες Καθηγητών
   Instagram @thmmy.gr
   mTHMMY
  
  Φοιτητικές Ομάδες
   ACM
   Aristurtle
   ART
   ASAT
   BEAM
   BEST Thessaloniki
   EESTEC LC Thessaloniki
   EΜΒ Auth
   IAESTE Thessaloniki
   IEEE φοιτητικό παράρτημα ΑΠΘ
   SpaceDot
   VROOM
   Panther
  
Πίνακας Ελέγχου
Welcome, Guest. Please login or register.
November 03, 2025, 18:21:45 pm

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
[ΑΣΗΕ] Γενικές απορίες κα...
by DimStyl
[Today at 15:00:14]

[Λογική Σχεδίαση] Εργαστή...
by RivenT
[Today at 08:06:35]

GEFORCE RTX 3080 Ti 12GB ...
by botrinis
[November 02, 2025, 12:34:04 pm]

Ταχυρρυθμα ιδιαιτερα Φυσι...
by kostisgialamas
[November 01, 2025, 23:48:04 pm]

Αρχείο Ανακοινώσεων [Arch...
by Nikos_313
[November 01, 2025, 16:57:52 pm]

Αποτυχία δήθεν "φοιτητικώ...
by Nikos_313
[November 01, 2025, 16:24:50 pm]

Τι ακούτε αυτήν τη στιγμή...
by Katarameno
[November 01, 2025, 01:34:27 am]

Ρυθμίσεις Θεμάτων της Ανώ...
by Nikos_313
[October 31, 2025, 21:46:32 pm]

[Σ.Φ. Ηλ-Μηχ] Κινητοποίησ...
by Nikos_313
[October 31, 2025, 21:41:48 pm]

Μόνο λάθος απαντήσεις
by Nikos_313
[October 31, 2025, 19:45:44 pm]

[ΣΦ ΗΛ-ΜΗΧ] Γενική Συνέλε...
by Aris★
[October 31, 2025, 17:44:39 pm]

[Λογική Σχεδίαση] Ύλη που...
by Orgianelis
[October 31, 2025, 02:04:50 am]

Ποιο τραγούδι ακούσατε 5+...
by pesto80
[October 31, 2025, 00:06:03 am]

Πρακτική Άσκηση ΤΗΜΜΥ 201...
by Διάλεξις
[October 30, 2025, 17:19:57 pm]

[Υψηλές Τάσεις Ι] Γενικές...
by chatzikys
[October 29, 2025, 14:50:41 pm]

[Πυρηνική Τεχνολογία] Γεν...
by chatzikys
[October 29, 2025, 14:49:30 pm]

Αποτελέσματα Εξεταστικής ...
by supersonic pepega
[October 29, 2025, 14:25:43 pm]

Ποιον θεωρείτε χειρότερο...
by Katarameno
[October 29, 2025, 12:49:59 pm]

[Τεχνικές Βελτιστοποίησης...
by ttsengel
[October 28, 2025, 09:30:42 am]

Των συνειρμών το παίγνιο....
by Nikos_313
[October 27, 2025, 14:27:19 pm]
Στατιστικά
Members
Total Members: 10156
Latest: drandic
Stats
Total Posts: 1428788
Total Topics: 31845
Online Today: 606
Online Ever: 2093
(April 17, 2025, 07:47:49 am)
Users Online
Users: 21
Guests: 183
Total: 204
nmpampal
karaths.d
BossiTsif
bit11
Relexility
aris123321
kouf
Captain
stavros0201
femanak
matrozos
Γιώργος Τσανακτσιίης
Tsn
tasos gourd
anthi kotsani
manek
mimaki
examino
Markella
Εμφάνιση

Νέα για πρωτοετείς
Είσαι πρωτοετής;... Καλώς ήρθες! Μπορείς να βρεις πληροφορίες εδώ. Βοήθεια για τους καινούργιους μέσω χάρτη.
Κατεβάστε εδώ το Android Application για εύκολη πρόσβαση στο forum.
Ανεβάζετε τα θέματα των εξετάσεων στον τομέα Downloads με προσοχή στα ονόματα των αρχείων!

Νέα!
Ωρολόγιο Πρόγραμμα Χειμερινού Εξαμήνου 2025-2026
THMMY.gr > Forum > Μαθήματα Βασικού Κύκλου > 1ο Εξάμηνο > Δομημένος Προγραμματισμός (Moderators: Tasos Bot, tzortzis, Nekt) > [Δομημένος Προγραμματισμός] Dynamic Memory Allocation
0 Members and 1 Guest are viewing this topic.
Pages: [1] 2 Go Down Print
Author Topic: [Δομημένος Προγραμματισμός] Dynamic Memory Allocation  (Read 4034 times)
ripper_george
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 684


Same Shit Different Day - SSDD


View Profile
[Δομημένος Προγραμματισμός] Dynamic Memory Allocation
« on: April 11, 2008, 23:15:32 pm »

Ένας λόγος που σιχαίνομαι τους πίνακες είναι ότι πρέπει να έχω ορίσει από πριν το μέγεθός τους....
Γιαυτό διάβασα από τις σημειώσεις για την δυναμική εκχώρηση μνήμης...

Δοκίμασα να δημιουργήσω δοκιμαστικά ένα προγραμματάκι όμως μου βγάζει σφάλμα ότι:
cannot convert from void to int

Ιδού ο κώδικας:

#include <stdio.h>
#include <stdlib.h>

void main()
{
   int *p;
   int x,i;
   printf("please enter the number of the values you want to store\n");
   scanf("%d",&x);
   p=malloc(x*sizeof(int));
   if (p==NULL)
   {
      printf("Not enough memory, please store less");
   }
   else
   {
      printf("Please start giving the values");
      for (i=0;i<x;i++)
      {
         p=p+i;
         scanf("%d",p);
      }
      for (i=0;i<x;i++)
      {
         printf("%d",*(p-x-1+i));
      }
      free(p-x+1);
   }
}

Από ότι καταλαβαίνω οφείλεται στο ότι δεν έχω ορίσει την p ως void αλλά ως int....
Όμως αν την δηλώσω ως void μετά στις επαναλήψεις τι ακριβώς να κάνω???
Δεν θα πρέπει να μεταβληθεί η τιμή της για να μεταφερθώ στις επόμενες θέσεις???

Επίσης στο internet είδα ένα πρόγραμμα όπου την malloc δεν την αποθηκεύει σε void αλλά int μεταβλητή.
Ιδού και το link:

http://irc.essex.ac.uk/www.iota-six.co.uk/c/f7_dynamic_memory_allocation.asp

Επίσης στις σημειώσεις το Κ.Κορτέση, (σελ.50) ορίζει μεταβλητή *p στην οποία εκχωρεί την malloc αλλά στη συνέχεια
αποθηκεύει την void p σε μία μεταβλητή int ip ( ip=p;).
Δοκίμασα και αυτό αλλά και πάλι μου βγάζει error ότι πάω να βάλω σε int μεταβλητή void. (Και με το δίκιο του.... Smiley)

Also, δεν κατάλαβα ξεκάθαρα την διαφορά της malloc και calloc....
Η calloc βάζει εξ αρχής το 0 σε κάθε μεταβλητή ενώ η malloc δεν τους δίνει καθόλου τιμές???

Any Help is deeply appreciated!!!
Thx in advance.
« Last Edit: May 08, 2008, 19:40:09 pm by Karaμazoβ » Logged

Common sense is not so common.
-Voltaire-
They say that the fastest travelling thing in the world is light, but coming to think about it... Darkness has always been there first!!!!! Smiley
vasso
Καταστραμμένος
********
Gender: Female
Posts: 6672


Overambitious doer


View Profile WWW
Re: Dynamic Memory Allocation
« Reply #1 on: April 11, 2008, 23:20:48 pm »

αυτό που κάνουμε συνήθως είναι type casting πριν τη malloc, δηλαδή

void *p;
p= (int *) malloc(... mplamplampla)
Logged

Είναι τα βλέφαρά μου
διάφανες αυλαίες.
Όταν τα ανοίγω βλέπω
μπρος μου ό,τι κι αν τύχει.
Όταν τα κλείνω βλέπω
μπρος μου ό,τι ποθώ.
vasso
Καταστραμμένος
********
Gender: Female
Posts: 6672


Overambitious doer


View Profile WWW
Re: Dynamic Memory Allocation
« Reply #2 on: April 11, 2008, 23:24:07 pm »

calloc πέρσι δε χρησιμοποιήσαμε καθόλου... είναι στις φετινές σημειώσεις;


Quote from: ripper_george on April 11, 2008, 23:15:32 pm

      for (i=0;i<x;i++)
      {
         p=p+i;
         scanf("%d",p);
      }
      for (i=0;i<x;i++)
      {
         printf("%d",*(p-x-1+i));
      }
      free(p-x+1);
   }
}
Δοκίμασε το κάπως έτσι:
      for (i=0;i<x;i++)
      {
         scanf("%d",p+i);
      }
      for (i=0;i<x;i++)
      {
         printf("%d",*(p+i));
      }
      free(p);
   }
}
« Last Edit: April 11, 2008, 23:26:18 pm by vasso » Logged

Είναι τα βλέφαρά μου
διάφανες αυλαίες.
Όταν τα ανοίγω βλέπω
μπρος μου ό,τι κι αν τύχει.
Όταν τα κλείνω βλέπω
μπρος μου ό,τι ποθώ.
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Dynamic Memory Allocation
« Reply #3 on: April 11, 2008, 23:29:47 pm »

Γιατί θέτεις p=p+i; Εκεί πρέπει να είναι το λάθος.
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
ripper_george
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 684


Same Shit Different Day - SSDD


View Profile
Re: Dynamic Memory Allocation
« Reply #4 on: April 11, 2008, 23:34:04 pm »

Vasso U RULE!!!! Wink
THX...

Τώρα τρέχει, αλλά μου βγάζει debugger error ότι debug assertation failed.....
Τι ακριβώς έκανα???? Το τίναξα???
Έβαλα για τρεις τιμές, αλλά αντί να μου ενφανίσει στην τρίτη τιμή, μου βγάζει κάτι ότινάναι αριθμούς..
Στις 2 τιμές δε λέει τίποτα απλώς για 1η τιμή βγάζει ότινάναι.....

Για το p=p+i δεν θα πρέπει να μεταβάλω τον pointer για να αποθηκεύσω διαδοχικές τιμές???

Όσο για την calloc, απλά την είδα στο site που ανέφερα και μου κίνησε την περιέργεια....
Logged

Common sense is not so common.
-Voltaire-
They say that the fastest travelling thing in the world is light, but coming to think about it... Darkness has always been there first!!!!! Smiley
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Dynamic Memory Allocation
« Reply #5 on: April 11, 2008, 23:41:35 pm »

Quote from: ripper_george on April 11, 2008, 23:34:04 pm
Για το p=p+i δεν θα πρέπει να μεταβάλω τον pointer για να αποθηκεύσω διαδοχικές τιμές???

Πρόσεξε λίγο, ξαναδές το. Έτσι όπως το έγραψες δεν είναι διαδοχικές οι διευθύνσεις. Ας πούμε πχ ότι p=5600, μετά γίνεται 5601, μετά 5603, μετά 5606...
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
ripper_george
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 684


Same Shit Different Day - SSDD


View Profile
Re: Dynamic Memory Allocation
« Reply #6 on: April 11, 2008, 23:47:49 pm »

Hmmm,
Seems that I really suck..... Lips Sealed
Thx...
Αλλά ακόμη μου βγάζει το debug assertation failed μύνημα....
Any idea why???
Logged

Common sense is not so common.
-Voltaire-
They say that the fastest travelling thing in the world is light, but coming to think about it... Darkness has always been there first!!!!! Smiley
vasso
Καταστραμμένος
********
Gender: Female
Posts: 6672


Overambitious doer


View Profile WWW
Re: Dynamic Memory Allocation
« Reply #7 on: April 11, 2008, 23:51:14 pm »

γιατί δεν χρησιμοποιείς dev... Tongue


ΥΓ. στην απίθανη περίπτωση που χρησιμοποιείς και  σου βγάζει όντως αυτή τη βλακέια μήνυμα, πες το με πιμι να σβήσω το μήνυμα μου...
Logged

Είναι τα βλέφαρά μου
διάφανες αυλαίες.
Όταν τα ανοίγω βλέπω
μπρος μου ό,τι κι αν τύχει.
Όταν τα κλείνω βλέπω
μπρος μου ό,τι ποθώ.
ripper_george
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 684


Same Shit Different Day - SSDD


View Profile
Re: Dynamic Memory Allocation
« Reply #8 on: April 11, 2008, 23:55:34 pm »

Το Visual Studio έχω....
Είχα ακούσει για κάτι διαφοροποιήσεις με τους κοινούς compiler και σκέφτηκα καλύτερα αυτό παρότι είναι microsoft,
μιας και το πρότεινε και ο K.Kορτέσης...
Logged

Common sense is not so common.
-Voltaire-
They say that the fastest travelling thing in the world is light, but coming to think about it... Darkness has always been there first!!!!! Smiley
ripper_george
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 684


Same Shit Different Day - SSDD


View Profile
Re: Dynamic Memory Allocation
« Reply #9 on: April 13, 2008, 22:44:16 pm »

Help!
To παρακάτω πρόγραμμα δεν τρέχει....  :'(

#include <stdio.h>
#include <stdlib.h>

void main()
{
   void *p,*l;
   int i,n,m;
   printf("please enter the number of the frequencies for the 1st radio station\n");
   scanf("%d",&n);
   printf("please enter the number of the frequencies for the 2nd radio station\n");
   scanf("%d",&m);
   p=malloc(n*sizeof(float));
   l=malloc(m*sizeof(float));
   if (p==NULL || l==NULL)
   {
      while (p==NULL || l==NULL)
      {
         printf("Not enought memory, Please try giving less frequencies\n");
         printf("please enter the number of the frequencies for the 1st radio station\n");
         scanf("%f",&n);
         printf("please enter the number of the frequencies for the 2nd radio station\n");
         scanf("%f",&m);
      }
   }
   else
   {
      printf("Please enter the frequencies for the 1st radio station\n");
      for (i=0;i<n;i++)
      {
         scanf("%f",(float*)p+i);
      }
      free(p-i);
      printf("Please enter the frequencies for the 2nd radio station\n");
      for (i=0;i<m;i++)
      {
         scanf("%f",(float*)l+i);
      }
      free(l-i);
   }
   printf("the first array\n");
   for (i=0;i<n;i++)
   {
      printf("%f",(float*)p+i);
   }
   printf("the second array\n");
   for (i=0;i<m;i++)
   {
      printf("%f",(float*)l+i);
   }
}

Από ότι ψιλιάζομαι, πρέπει να έχει πρόβλημα στην free...
Για να μπορέσω να αποθηκεύσω τιμές, στις επαναλήψεις που θα κάνω πρέπει να μετατρέψω τις p,l από void σε float, right???
Μετά όμως για να μπορέσω να αποδεσμεύσω τη μνήμη, πρέπει να βάλω την free, η οποία δέχεται ως όρισμα void τιμή, right???
Αυτό δεν έχω κάνει???
Τι γελοιότητα πάλι έχω κάνει??
Anyone having an idea???
Thx in advance!
Logged

Common sense is not so common.
-Voltaire-
They say that the fastest travelling thing in the world is light, but coming to think about it... Darkness has always been there first!!!!! Smiley
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Dynamic Memory Allocation
« Reply #10 on: April 13, 2008, 22:54:04 pm »

Το while θα εκτελείται συνεχώς, αφού δεν αλλάζουν μέσα τα p και l.
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
ripper_george
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 684


Same Shit Different Day - SSDD


View Profile
Re: Dynamic Memory Allocation
« Reply #11 on: April 13, 2008, 22:55:41 pm »

Καλή παρατήρηση....
Όμως καμία ιδέα για το λάθος μέσα στις free???
Logged

Common sense is not so common.
-Voltaire-
They say that the fastest travelling thing in the world is light, but coming to think about it... Darkness has always been there first!!!!! Smiley
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Dynamic Memory Allocation
« Reply #12 on: April 13, 2008, 23:08:52 pm »

Α σόρι, νόμιζα ότι βρήκα ΤΟ λάθος και δεν πήγα παρακάτω Tongue

Μου φαίνεται ότι κάνεις free πριν διαβάσεις τις τιμές... και ούτως ή άλλως αυτό που κάνεις free δεν είναι στη δεσμευμένη μνήμη, γιατί είναι n θέσεις πριν το p (αντίστοιχα m θέσεις πριν το l) - σε εκείνο το σημείο του προγράμματος είναι i=n (αντίστοιχα m). Κάνε free(p) και free(l) - αλλά στο τέλος του προγράμματος.

Επίσης, η printf δεν παίρνει τους δείκτες σαν όρισμα, βάζεις τις ίδιες τις μεταβλητές.
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
ripper_george
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 684


Same Shit Different Day - SSDD


View Profile
Re: Dynamic Memory Allocation
« Reply #13 on: April 13, 2008, 23:15:23 pm »

Thx man,
U r the best! Cheesy
Logged

Common sense is not so common.
-Voltaire-
They say that the fastest travelling thing in the world is light, but coming to think about it... Darkness has always been there first!!!!! Smiley
Emfanever
Καταστραμμένος
********
Gender: Male
Posts: 5284


Πολίτης


View Profile
Re: Dynamic Memory Allocation
« Reply #14 on: May 02, 2008, 21:59:17 pm »

Quote from: vasso on April 11, 2008, 23:20:48 pm
αυτό που κάνουμε συνήθως είναι type casting πριν τη malloc, δηλαδή

void *p;
p= (int *) malloc(... mplamplampla)
Μετά όμως αν θέλουμε να αποθηκεύσουμε στo p[ι] τις τιμές τι γίνεται με το " %d " που βάζουμε μέσα στη scanf;
π.χ αν γράψουμε
_____________________________
#include <stdio.h>
#include <stdlib.h>

void main()
{
  void *p;
  int i,k;

  printf("k=");
  scanf("%d",&k);

  p = (int *) malloc(k*sizeof(int));
  for(i=0;i<k;i++)
      scanf("%d",&p[ι]);

}
__________________________________
Βγάζει σφάλμα γιατί το p είναι void και βάζουμε  "%d"
Logged
Pages: [1] 2 Go Up Print
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Scribbles2 | TinyPortal © Bloc | XHTML | CSS
Loading...