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

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
Τι ακούτε αυτήν τη στιγμή...
by Katarameno
[November 03, 2025, 20:22:53 pm]

[ΑΣΗΕ] Γενικές απορίες κα...
by DimStyl
[November 03, 2025, 15:00:14 pm]

[Λογική Σχεδίαση] Εργαστή...
by RivenT
[November 03, 2025, 08:06:35 am]

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 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: 1428789
Total Topics: 31845
Online Today: 226
Online Ever: 2093
(April 17, 2025, 07:47:49 am)
Users Online
Users: 10
Guests: 187
Total: 197
_moschou
Tasos Bot
fivosfivos1
sosak
Captain
Nicolas Thymiatis
CodeBro
Εμφάνιση

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

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



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

Quote from: Faidon on May 24, 2006, 18: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, 02: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, 07:35:31 am »

Quote from: BOBoMASTORAS on May 25, 2006, 02: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, 13: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, 13: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, 13:07:40 pm »

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

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

Quote from: Faidon on May 25, 2006, 13: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, 14: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, 14: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, 16: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...