• Downloads
  • ! Read Me !
  • Μαθήματα
  • Φοιτητικά
  • Τεχνικά Θέματα
  • Συζητήσεις
  • Happy Hour!
  • About THMMY.gr
 V  < 
Search:  
Welcome, Guest. Please login or register.
May 06, 2026, 02:13:58 am

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.
May 06, 2026, 02:13:58 am

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
Δηλώσεις μαθημάτων επί δι...
by Nikos_313
[May 04, 2026, 17:35:27 pm]

[ΑΡΑΓΕ Attack] Κεντρική ε...
by Aris★
[May 04, 2026, 12:46:59 pm]

Πρόγραμμα Εαρινής Εξεταστ...
by Nikos_313
[May 04, 2026, 12:41:55 pm]

Των συνειρμών το παίγνιο....
by Nikos_313
[May 04, 2026, 01:03:42 am]

[Ηλεκτρονική ΙΙ] Γενικές ...
by tony stank
[May 03, 2026, 11:17:34 am]

[Ισχύος II] Γενικές απορί...
by sofi
[May 02, 2026, 22:47:49 pm]

Αποτελέσματα Εξεταστικής ...
by User
[May 01, 2026, 19:00:40 pm]

Αρχείο Ανακοινώσεων [Arch...
by Nikos_313
[April 30, 2026, 09:15:39 am]

Energy Talks 2- IEEE PES ...
by IEEE PES AUTh SBC
[April 29, 2026, 17:00:32 pm]

Πρακτική Άσκηση ΤΗΜΜΥ 201...
by Διάλεξις
[April 29, 2026, 15:15:08 pm]

[Πιθανότητες] Γενικές απο...
by Nikos_313
[April 28, 2026, 23:59:01 pm]

Πληροφορίες καθηγητών
by Hyperlaz02
[April 28, 2026, 17:43:31 pm]

[Αριθμητική Ανάλυση] Γενι...
by tony stank
[April 28, 2026, 16:11:24 pm]

Συγγράματα προς διάθεση -...
by Mr Watson
[April 28, 2026, 10:20:16 am]

Erasmus στο KU Leuven
by Hyperlaz02
[April 27, 2026, 23:28:45 pm]

Εργοτάξιο Μετρό Θεσσαλονί...
by okan
[April 27, 2026, 18:06:43 pm]

[Η/Μ Πεδίο I] Γενικές απο...
by Nikos_313
[April 26, 2026, 01:58:04 am]

Ποιος είναι ο πιο γρήγορο...
by Nikos_313
[April 26, 2026, 01:54:07 am]

Υλικό Job Fair - Ζυρίχη
by Threshold
[April 23, 2026, 23:11:00 pm]

[ΑΡΑΓΕ ΑΤΤΑΚ] ΚΑΛΕΣΜΑ ΣΕ ...
by cvakadimas
[April 23, 2026, 14:11:48 pm]
Στατιστικά
Members
Total Members: 10376
Latest: angement
Stats
Total Posts: 1431041
Total Topics: 32001
Online Today: 497
Online Ever: 18918
(April 06, 2026, 16:05:31 pm)
Users Online
Users: 2
Guests: 358
Total: 360
ant2946
Εμφάνιση

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

Νέα!
Για οποιοδήποτε πρόβλημα με register/login, στείλτε email στο contact@thmmy.gr.
THMMY.gr > Forum > Μαθήματα Βασικού Κύκλου > 1ο Εξάμηνο > Δομημένος Προγραμματισμός (Moderators: Tasos Bot, tzortzis, Nekt, tony stank) > Περίεργο ERROR στη C...
0 Members and 1 Guest are viewing this topic.
Pages: 1 [2] Go Down Print
Author Topic: Περίεργο ERROR στη C...  (Read 5391 times)
Faidon
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 540



View Profile WWW
Re: Περίεργο ERROR στη C...
« Reply #15 on: May 25, 2006, 02:42:15 am »

Quote from: Faidon on May 24, 2006, 19:40:22 pm
O παρακάτω κώδικα λειτουργεί κανονικά χωρίς να δώσω στον pointer τη διέυθυνση άλλης μεταβλητής όπως προτείνεις:

main(){
  int a,*b;
  *b=0;
  printf("%i",*b);
  scanf("%i",&a);
}

Το περιεχόμενο του pointer b (*b) παίρνει την τιμή 0 και την εκτυπώνει κανονικά.

Τότε γιατί αυτός ο κώδικας τρέχει κανονικά;;
Logged
BOBoMASTORAS
Veteran
Καταστραμμένος
******
Posts: 6082


It just doesn't get any easier! It gets worse...


View Profile
Απ: Περίεργο ERROR στη C...
« Reply #16 on: May 25, 2006, 03:18:41 am »

Εντελώς τυχαίο..... Ο b έχει σκουπίδια δε ξέρεις που δείχνει....

Γενικά τα windows σα λειτουργικό καταγράφουν τις θέσεις μνήμης που έχει δεσμεύσει ένα πρόγραμμα. Αν προσπαθήσει να γράψει σε διεύθυνση που δεν έχει δεσμέσει βγάζει το μήνυμα που ανέφερε ο συνάδελφος. υπάρχει όμως πάντα το ενδεχόμενο η θέση μνήμης να έχει δεσμευτέι από το πρόγραμμα και να είναι κάποια άλλη μεταβλητή ή ακόμα και κώδικας. Τότε τα widows δε θα βγάλουν error. Αν δοκιμάσεις να τρέξεις το exe εκτός του compiler είναι πολύ πιθανό μερικές φορές να βγάζεις ερρορ και αλλές όχι
Logged

Της γενιάς μου βασιλιά,
μην κατέβεις τα σκαλιά.
Πιες αθάνατο νερό
να νικήσεις τον καιρό.

http://tools.ietf.org/html/rfc1149
The only reason we invent robots
meltemi
Μόνιμος κάτοικος ΤΗΜΜΥ.gr
******
Gender: Female
Posts: 2491



View Profile WWW
Απ: Περίεργο ERROR στη C...
« Reply #17 on: May 25, 2006, 08:35:31 am »

Quote from: BOBoMASTORAS on May 25, 2006, 03:18:41 am
Γενικά τα windows σα λειτουργικό καταγράφουν τις θέσεις μνήμης που έχει δεσμεύσει ένα πρόγραμμα. Αν προσπαθήσει να γράψει σε διεύθυνση που δεν έχει δεσμέσει βγάζει το μήνυμα που ανέφερε ο συνάδελφος. υπάρχει όμως πάντα το ενδεχόμενο η θέση μνήμης να έχει δεσμευτέι από το πρόγραμμα και να είναι κάποια άλλη μεταβλητή ή ακόμα και κώδικας. Τότε τα widows δε θα βγάλουν error. Αν δοκιμάσεις να τρέξεις το exe εκτός του compiler είναι πολύ πιθανό μερικές φορές να βγάζεις ερρορ και αλλές όχι

Σε αυτό κατέληξα κι εγώ.  Sad
Ευχαριστούμε Bob.  kissy kissy
Logged
Faidon
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 540



View Profile WWW
Re: Περίεργο ERROR στη C...
« Reply #18 on: May 25, 2006, 14:00:08 pm »

Επιτέλους το κατάλαβα...

Ο παρακάτω κώδικας δεν τρέχει ΠΟΤΕ σωστά, όπως είπα βγάζει error:

main(){
  int a,b,c,d,*e;
  *e=1;
  printf("%i",*e);
  scanf("%i",&a);
}

Οι παρακάτω όμως τρέχουν ΠΑΝΤΑ κανονικά, στο δικό μου PC τουλάχιστον:

main(){
  int a,b,c,d,f,g,h,t,y,u,i,*e;
  *e=1;
  printf("%i",*e);
  scanf("%i",&a);
}

main(){
  int a,*e;
  *e=1;
  printf("%i",*e);
  scanf("%i",&a);
}

Εγώ καταλήγω στο συμπέρασμα (σύμφωνα με αυτα που λέτε) ότι όταν δηλώνεις μία μεταβλητή απλή ή pointer, η C δεσμεύει χώρο για αυτήν ή το περιεχόμενο του pointer. Αν όμως αυτό το περιεχόμενο του pointer δεν σου επιτρέπουν τα WINDOWS να το χρησιμοποιήσεις βγάζει error.

Τότε στον συγκεκριμένο κώδικα το περιεχόμενο του pointer, όταν τον δηλώνω πέμπτο, είναι τέτοιο που τα WINDOWS δε μου επιτρέπουν να το χρησιμοποιήσω.
Αντίθετα όταν δηλώνω τον pointer δέυτερο ή δωδέκατο το περιεχόμενο του είναι τέτοιο που τα WINDOWS μου επιτρέπουν να το χρησιμοποιήσω.

Έτσι είναι;
« Last Edit: May 25, 2006, 14:02:43 pm by Faidon » Logged
BOBoMASTORAS
Veteran
Καταστραμμένος
******
Posts: 6082


It just doesn't get any easier! It gets worse...


View Profile
Απ: Περίεργο ERROR στη C...
« Reply #19 on: May 25, 2006, 14:07:40 pm »

Quote from: Faidon on May 25, 2006, 14:00:08 pm
Εγώ καταλήγω στο συμπέρασμα (σύμφωνα με αυτα που λέτε) ότι όταν δηλώνεις μία μεταβλητή απλή ή pointer, η C δεσμεύει χώρο για αυτήν η το περιεχόμενο του pointer. Αν όμως αυτό το περιεχόμενο του pointer δεν σου επιτρέπουν τα WINDOWS να το χρησιμοποιήσεις βγάζει error.

πάντοτε δεσμεύεις μνήμη απλά για την μεταβλητή σου. έτσι όταν δηλώνεις ένας pointer δεσμέυεις μνήμη για να αποθηκευτεί η διεύθυνση στην οποία θέλεις να γράψεις (πχ αποθηκεύεται το 100 ως διεύθυνση μνήμης) Το αν η συγκεκριμένη θέση μνήης είναι δευσμευμένη είναι κάτι το οποίο πρέπει να το φροντ΄'ισεις εσύ. δηλαδή μπορεί να μην έχεις δεσμεύσει την θέση 100 ώστε να γράψεις σε αυτήν

Quote from: Faidon on May 25, 2006, 14:00:08 pm
Τότε το περιεχόμενο του pointer (όταν των δηλώνω πέμπτο) είναι τέτοιο που τα WINDOWS δε σου επιτρέπουν να το χρησιμοποιήσεις.
Αντίθετα όταν δηλώνω τον pointer δέυτερο ή δωδέκατο το περιεχόμενο του είναι τέτοιο που τα WINDOWS σου επιτρέπουν να το χρησιμοποιήσεις.

Έτσι είναι;

Η σειρά μπορεί να αλλάξει ανάλογα με τον compiler  που χρησιμοποιείς την αρχιτεκτονική του υπολογιστή σου το λειτουργικό που χρησημοποιείς και πολλά άλλα. Δε μπορείς να καταλήξεις σε ένα στάνταρ κανόνα.
Logged

Της γενιάς μου βασιλιά,
μην κατέβεις τα σκαλιά.
Πιες αθάνατο νερό
να νικήσεις τον καιρό.

http://tools.ietf.org/html/rfc1149
The only reason we invent robots
cybegar
Αρχάριος/Αρχάρια

Posts: 2


View Profile
Re: Περίεργο ERROR στη C...
« Reply #20 on: May 25, 2006, 15:08:09 pm »

Όταν χρησιμοποιείς μια μεταβλητή τύπου pointer απλά για να της αναθέσεις την διεύθυνση ενός
άλλου pointer, τότε δεν χρειάζεται να κάνεις δυναμική κατανομή της μνήμης(malloc(C)/new(C++)).
Εάν όμως σκοπεύεις να δώσεις τιμές στην διεύθυνση της μεταβλητής τύπου pointer που ορίζεις, τότε
σαφώς και πρέπει να δεσμεύσεις δυναμικά μνήμη ώστε να αποθηκευθούν τα δεδομένα σου.
Ανάλογα με τον compiler που χρησιμοποιείς, το πρόγραμμα μπορεί άλλοτε να κάνει compile και να τρέχει
δημιουργώντας errors στο λειτουργικό και άλλοτε να μην τρέχει καθόλου.

Π.χ.

είχα έναν pointer x (int *x) ο οποίος κρατούσε κάποια τιμή.
Αν δημιουργήσω ένα νέο pointer int *n και κάνω assign
n = x;
τότε δεν έχω πρόβλημα.

Αν όμως θέλω να δημιουργήσω το n και να του δώσω τιμή

int *n
*n=10;

τότε έχω!
Χρειάζεται προηγουμένως:

n = (int)malloc(sizeof(int);
« Last Edit: May 25, 2006, 15:12:07 pm by cybegar » Logged
lambros
Καταξιωμένος/Καταξιωμένη
***
Gender: Male
Posts: 170


Mike Oldfield - Ommadawn :)


View Profile
Re: Περίεργο ERROR στη C...
« Reply #21 on: May 25, 2006, 17:28:07 pm »

Σωστά Smiley . Στη C πρέπει να έχουμε πάντα το νου μας για τα σκουπίδια.Αν για παράδειγμα γράψω int k θα μου δεσμέυσει μνήμη για το k , αλλά άμα εκτυπώσω τα περιεχόμενα του δεν θα είναι 0 αλλά κάτι άσχετο.Ανάλογα η int *k δεσμεύει μνήμη για τον δείκτη k,αλλά αυτή η θέση μνήμης θα περιέχει "σκουπίδι" .Έτσι όπως στη πρώτη περίπτωση θα βάζαμε πχ k=10 για να αρχικοποιήσουμε τη μεταβλητή , έτσι και στην περίπτωση του δείκτη πρέπει να του δώσουμε μια συγκεκριμένη διεύθυνση.
Δηλαδή είτε χρησιμοποιείς μια επιπλέον μεταβλητή
                                                               ( int *e,ptr;   //ptr  η επιπλέον μεταβλητή
                                                                 e=&ptr;
                                                                  *e=1;   )
είτε με τη malloc.
Logged

Έλευθερος είναι ο άνθρωπος που ζει μέσα στο Αιώνιο , γιατί αυτό είναι Ζωή.

Κ.
Pages: 1 [2] Go Up Print
Jump to:  

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