• Downloads
  • ! Read Me !
  • Μαθήματα
  • Φοιτητικά
  • Τεχνικά Θέματα
  • Συζητήσεις
  • Happy Hour!
  • About THMMY.gr
 V  < 
Search:  
Welcome, Guest. Please login or register.
June 17, 2025, 15:47:13 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.
June 17, 2025, 15:47:13 pm

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
Τι ακούτε αυτήν τη στιγμή...
by Katarameno
[Today at 14:25:00]

Αντικατάστασης πυκνωτή σε...
by george14
[Today at 13:58:20]

Πότε θα βγει το μάθημα; -...
by tzortzis
[Today at 13:19:53]

Αποτελέσματα Εξεταστικής ...
by george14
[Today at 12:08:25]

[ΨEE] Γενικές απορίες και...
by Juror8
[Today at 12:06:57]

Ισραήλ - Ιράν: Πόλεμος στ...
by okan
[Today at 02:33:21]

[Οργάνωση Υπολογιστών] Γε...
by RAFI
[June 16, 2025, 22:46:54 pm]

[Σ.Π.Η.Ε.] Γενικές απορίε...
by Nikos_313
[June 16, 2025, 19:49:00 pm]

[ΘΤΠΑ] Γενικές απορίες κα...
by Nikos_313
[June 16, 2025, 16:56:56 pm]

[Εφ.Θερμοδυναμική] Γενικέ...
by Λαμπτήρας
[June 16, 2025, 15:55:08 pm]

[Αρχές Οικονομίας] Να επι...
by _Trob
[June 16, 2025, 13:28:21 pm]

[Σ.Α.Π.Γ.] Εργασία 2025
by Nikos_313
[June 16, 2025, 12:13:45 pm]

Πρακτική Άσκηση ΤΗΜΜΥ 201...
by George_RT
[June 16, 2025, 10:22:18 am]

[Διανεμημένη Παραγωγή] Γε...
by Διάλεξις
[June 16, 2025, 01:56:37 am]

[Σ.Π.Η.Ε.] Παλιά θέματα -...
by nmpampal
[June 15, 2025, 06:43:15 am]

Το thmmy.gr στο instagram...
by Mr Watson
[June 15, 2025, 00:50:23 am]

[Λογισμός ΙΙ] Απορίες σε...
by el mariachi
[June 14, 2025, 20:47:07 pm]

ΠΡΟΣΟΧΗ στο ανέβασμα θεμά...
by tzortzis
[June 14, 2025, 16:54:08 pm]

Ρυθμίσεις Θεμάτων της Ανώ...
by el mariachi
[June 14, 2025, 11:56:45 am]

Αρχείο Ανακοινώσεων [Arch...
by Nikos_313
[June 14, 2025, 09:58:14 am]
Στατιστικά
Members
Total Members: 9961
Latest: Poli
Stats
Total Posts: 1426689
Total Topics: 31710
Online Today: 200
Online Ever: 2093
(April 17, 2025, 08:47:49 am)
Users Online
Users: 66
Guests: 107
Total: 173
Spyrtos14
Νικηφόρος Πατσιούρας
savvastzan
Rizotto
genethalsss74
Διάλεξις
slivarda
eplysia
salonikios
EvanTsir
tsintsi
Fotis Roukoutakis
Geoth
stavrospk
giorgos_skl
ValKar
Theoxarhs Bladimiros
chriskazakos
lelenia
alexpap
sassi
kouf
chrisg
DimKaratzas
thomasdt
chrysolog
Le ece
ioathemar
skoloni
mitsos753905
Billyskotsikas
giatieimaiedw
DLHERRO
kkotsopo
Billy K
superkolios
Mikekmp
harischris
karadimitras
Solon
Gianbou
Marihouan820
Don Corleone
konssidiro
pdiamantis
Ntinomanolo123
ThanosKoutsoump
agkentzi
Papadopoulosthanos
dimant
george14
URI
Nicotre
sigklitiki
johnk
thomassamaras
unreasonable
Cloud Strife
akontel
aachmet
Εμφάνιση

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

Νέα!
  Όταν ανεβάζουμε φωτογραφίες στις Ανακοινώσεις και Έκτακτα νέα, βάζουμε τη μεγαλύτερη πλευρά 400 (width=400 ή height=400 ). π.χ. [img height=400 (κλείνει η αγκύλη) 
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 3587 times)
ripper_george
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 684


Same Shit Different Day - SSDD


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

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

Δοκίμασα να δημιουργήσω δοκιμαστικά ένα προγραμματάκι όμως μου βγάζει σφάλμα ότι:
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, 20: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 12, 2008, 00:20:48 am »

αυτό που κάνουμε συνήθως είναι 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 12, 2008, 00:24:07 am »

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


Quote from: ripper_george on April 12, 2008, 00:15:32 am

      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 12, 2008, 00:26:18 am by vasso » Logged

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


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


View Profile
Re: Dynamic Memory Allocation
« Reply #3 on: April 12, 2008, 00:29:47 am »

Γιατί θέτεις 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 12, 2008, 00:34:04 am »

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 12, 2008, 00:41:35 am »

Quote from: ripper_george on April 12, 2008, 00:34:04 am
Για το 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 12, 2008, 00:47:49 am »

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 12, 2008, 00:51:14 am »

γιατί δεν χρησιμοποιείς 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 12, 2008, 00:55:34 am »

Το 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, 23: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, 23: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, 23: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 14, 2008, 00:08:52 am »

Α σόρι, νόμιζα ότι βρήκα ΤΟ λάθος και δεν πήγα παρακάτω 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 14, 2008, 00:15:23 am »

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, 22:59:17 pm »

Quote from: vasso on April 12, 2008, 00:20:48 am
αυτό που κάνουμε συνήθως είναι 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...