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

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
Πρακτική Άσκηση ΤΗΜΜΥ 201...
by asemas
[Today at 16:20:27]

Τι ακούτε αυτήν τη στιγμή...
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]

[Διανεμημένη Παραγωγή] Γε...
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: 1426690
Total Topics: 31710
Online Today: 218
Online Ever: 2093
(April 17, 2025, 08:47:49 am)
Users Online
Users: 84
Guests: 128
Total: 212
folas
athena_apo
Vangelan
george14
Don
cealexop
vasilis saitis
stergios03
Andreas K
Nicotre
harischris
nikos123321
theofr
Belafonte
trelogauros7
Psychoktonos_
Carot1456
Kenedy
asimomyti
mailon
stelinas
chondrosp
papakyrn
LelisNiko
Christop
summersunshine
dkatsoul
victoria ginikopoulou
spyros36
Δημητρης Αξιμιωτης
elenak
jimalexoud
hraklis2002
giorgosss03
drimagm
nikpamp
Pakapis5
tmpadasn
papatmaria
dkoui
agapi
TheKingInTheNorth
eli_k
marilita
iJasonOP
Emilios
maestros
Βασιλης
alexandraskol
vaggelis.ntokas
k_tasio_
filon05
DimKaratzas
Sotirisbikos
vpoug
Elenit
prigians
Vaantoniadis
Captain
Mardouk75
nikitask
vajim
distillery
ariadnipm
evitzv
iliaskou
panapasc05
andripappa
skopsinos
sofaki
dkonst
dmoral
akiousia
Χρήστος Κίτσος
palladas
BossiTsif
kesha
Εμφάνιση

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

Νέα!
Η γραμματεία είναι ανοιχτή καθημερινά 12:00-13:30 Tongue
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 4559 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...