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

Login with username, password and session length

Αναζήτηση

Google

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

Τι ακούτε αυτήν τη στιγμή...
by Katarameno
[Today at 02:29: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]

Αποτελέσματα Εξεταστικής ...
by Nikos_313
[June 16, 2025, 12:01:53 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, 16:25:56 pm]

[Σ.Π.Η.Ε.] Παλιά θέματα -...
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]

Πότε θα βγει το μάθημα; -...
by Nikos_313
[June 14, 2025, 10:00:55 am]

Αρχείο Ανακοινώσεων [Arch...
by Nikos_313
[June 14, 2025, 09:58:14 am]

Αλέξης Τσίπρας, η επιστρο...
by Yamal
[June 14, 2025, 04:42:23 am]
Στατιστικά
Members
Total Members: 9960
Latest: valco08
Stats
Total Posts: 1426680
Total Topics: 31710
Online Today: 169
Online Ever: 2093
(April 17, 2025, 08:47:49 am)
Users Online
Users: 6
Guests: 89
Total: 95
PolarBear
GiorgosSarak
bsp
stefpapa21
Εμφάνιση

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

Νέα!
Πληροφορίες Καθηγητών
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 4538 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...