Απλή απωρία...

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

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
PanosPss
Δημοσιεύσεις: 78
Εγγραφή: 10 Μάιος 2008 19:53

Απλή απωρία...

Δημοσίευση από PanosPss » 01 Μάιος 2010 18:17

Γεια σε όλου...

Έχω μια πολύ απλή απωρία και θα ήθελα να με βοηθήσει όποιος ξέρει.

Τι εννοούμε όταν λέμε ένα πρόγραμα δεν είναι stable???

πχ αν έχουμε των παρακάτω πρόγραμμα σε C
#include <stdio.h>

int main() {

int a = 1;

while (a<10) {
printf("KALHMERA!!!");
}

return 0;

}
που λείπει το a++, τότε έχουμε ένα πρόγραμμα που δεν είναι stable???

PanosPss
Δημοσιεύσεις: 78
Εγγραφή: 10 Μάιος 2008 19:53

Απλή απωρία...

Δημοσίευση από PanosPss » 03 Μάιος 2010 00:11

Κανένας δεν ξέρει???

just_steve
Δημοσιεύσεις: 11
Εγγραφή: 18 Μαρ 2010 22:54

Απλή απωρία...

Δημοσίευση από just_steve » 03 Μάιος 2010 01:21

Καλημέρα.

Δεν ξέρω C, αλλα μήπως έχει να κάνει με το ότι αυτό το πρόγραμμα δεν τερματίζει ποτε?
Δηλαδή θα τρέχει συνεχόμενα σαν να έχει κολλήσει.
Procrastinating...

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Απλή απωρία...

Δημοσίευση από dva_dev » 03 Μάιος 2010 02:32

Μια χαρά stable είναι το πρόγραμμα. Οσες φορές και να το τρέξεις, σε όποιον υπολογιστή και να το τρέξεις, ανεξάρτητα από τι προγράμματα έτρεξαν πριν ή τι τρέχει ταυτόχρονα την ίδια δουλειά θα κάνει το πρόγραμμα, θα εκτυπώνει καλημέρα μέχρι την πρώτη διακοπή ρεύματος.
Δεν είναι stable, όταν τερματίζει χωρίς να το θέλεις για κάποιον "ανεξήγητο" "μυστηριώδη" λόγο. Δεν είναι stable όταν προσπαθεί να γράψει περιοχή μνήμης που δεν "ανήκει" στο πρόγραμμα. Δεν είναι stable όταν χρησιμοποιεί τμήματα μνήμης που δεν τα έχει ελέγξει ή δεν τα έχει αρχικοποιήσει, αλλά στηρίζεται σε ότι "τυχαίο" περιεχόμενο μπορεί να έχουν εκείνη τη στιγμή. Δεν είναι stable όταν δεν ελέγχει τις τιμές των μεταβλητών που χρησιμοποιεί και τις χρησιμοποιεί ελπίζοντας στην καλύ τύχη.
Γενικά δεν είναι stable όταν υπάρχουν εντολές που δεν τις ελέγχεις αν χρησιμοποιούν περιοχές μνήμης που δεν ανήκουν στο πρόγραμμα, ή μεταβλητές που δεν τους έχεις δώσει εσύ αρχική τιμή ή δεν ελέγχεις αν η τιμή που έχουν είναι "έγκυρη"/"αποδεκτή" για αυτό που θέλεις να κάνεις ή όχι.
Π.χ. στο παρακάτω πρόγραμμα θα δεις αρκετά από τα παραπάνω σημεία.

Κώδικας: Επιλογή όλων

#include <stdio.h>

int main&#40;&#41;
&#123;
	char c;
	char *pc;
	char *pc2 = 0;
	int i;
	int j=0;

	while &#40;i<12&#41; //το i έχει "τυχαία" αρχική τιμή
	&#123;
		printf&#40;"%d", i&#41;; //το i έχει "τυχαία" αρχική τιμή
		printf&#40;pc&#41;; //το pc έχει "τυχαία" αρχική τιμή. Το string που θα τυπωθεί μπορεί να βρίσκεται οπουδήποτε στη μνήμη και δεν ξέρουμε και τι θα έχει
		*pc2 = c; //Γράφουμε σε διεύθυνση μνήμης που δεν ανήκει στο πρόγραμμα
		*pc = *pc2; //Γράφουμε σε "τυχαία" διεύθυνση μνήμης
		printf&#40;"%f", i/j&#41;; //Διαιρούμε με το 0.
		pc = strstr&#40;"ABC", "DEF"&#41;;
		*pc = 'D'; //Δεν ελέγχουμε αν το pc έχει έγκυρη διεύθυνση μνήμης ή δείχνει στο γάμο του καραγκιόζη
	&#125;
	return i; //επιστρέφουμε την "τυχαία" τιμή που έχει το i.
&#125;
To προγραμματάκι αυτό κατά 50% θα σκάσει (νομίζω σε linux θα βγάλει segmentation fault) αφού μας έχει τυπώσει το τυχαίο νούμερο που έχει το i και το τυχαίο string που δείχνει το pc. Αυτό εξαρτάται από το τι άλλα προγράμματα έχουν τρέξει πιο πριν και έχουν αφήσει "σκουπίδια" στη μνήμη, και τι άλλα προγράμματα τρέχουν ταυτόχρονα.
Η μοναδική περίπτωση που θα είμαστε τυχεροί και δεν θα σκάσει, είναι το i να έχει κάποια τυχαία τιμή μικρότερη από 12 (και οι αρνητικοί μέσα), και θα μας την επιστρέψει στο κέλυφος (bash, csh, dos, ή ότι άλλο έχουμε). Ποιά είναι αυτή η τιμή που θα επιστρέψει δεν την ξέρουμε. Μπορεί να είναι 0, μπορεί 1, μπορεί 11, μπορεί -2345.
Το σημαντικό χαρακτηριστικό είναι, πως συνήθως κάθε φορά που θα το τρέχουμε, έχοντας τρέξει άλλα προγράμματα πιο πριν θα βλέπουμε και διαφορετικά πράγματα. Αλλες φορές θα σκάει, άλλες όχι και θα τυπώνει ότι του κατέβει. Δεν έχει συγκεκριμένη συμπεριφορά, που πάντα θα κάνει τα ίδια πράγματα, σε όλους τους υπολογιστές.

PanosPss
Δημοσιεύσεις: 78
Εγγραφή: 10 Μάιος 2008 19:53

Απλή απωρία...

Δημοσίευση από PanosPss » 04 Μάιος 2010 16:01

Σε ευχαριστώ πολύ!!!

Απάντηση

Επιστροφή στο “γλώσσες προγραμματισμού - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης