kfoynt Δημοσ. 22 Ιουλίου 2010 Share Δημοσ. 22 Ιουλίου 2010 Χαλοο Παίρνω segmentation fault όταν κάνω μια απλή ανάθεση μεταβλητής όταν χρησιμοποιώ κατα το compile την επιλογή -O2. Γιατι??? Ευχαριστώ..! Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
godlike Δημοσ. 23 Ιουλίου 2010 Share Δημοσ. 23 Ιουλίου 2010 Να δούμε λίγο κώδικα; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
kfoynt Δημοσ. 23 Ιουλίου 2010 Μέλος Share Δημοσ. 23 Ιουλίου 2010 Να δούμε λίγο κώδικα; ναι, σωστά... αν και δεν νομίζω να βοηθήσει γιατι ειναι πολύ απλός. Λοιπόν, δεν μπορώ να φανερώσω συγκεκριμένα πράγματα γιατι έχω υπογράψει, αλλα μια γενική ιδέα μπορώ να δώσω: > long var; // δήλωση μεταβλητής if ( L->iterslv > 0 && L->mtxF != 1 ) { var = 8 * ( L->max_m + L->max_n ); } else { var = 2; } VECT(L->var, double, var); if ( L->var == NULL ) { printf("solver: failed for var.\n"); exit(1); } L->lvar = var; // XXX εδώ μου πετάει το segmentation Ο L pointer δειχνει σε μία structure, η οποία υπάρχει στην μνήμη κανονικά, το τσέκαρα απο τον debugger. Επίσης η L->lvar υπάρχει στην μνήμη και έχει την τιμή που της έδωσα σε μία άλλη function. Τέλος η var ύστερα απο τα if statements παίρνει την τιμή 2, επίσης το τσέκαρα. Αλλά!! όταν πάω να κάνω την ανάθεση L->lvar = var; παίρνω segmentation fault, η οποία ανάθεση, άμα δεν χρησιμοποιήσω το option -O2 δουλεύει μια χαρά. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
bnvdarklord Δημοσ. 23 Ιουλίου 2010 Share Δημοσ. 23 Ιουλίου 2010 Τι ακριβώς κανει το option -O2? Ειναι απαραίτητο να το χρησιμοποιήσεις εφόσον δουλευει κανονικά χωρις αυτο? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
ippo00 Δημοσ. 23 Ιουλίου 2010 Share Δημοσ. 23 Ιουλίου 2010 θα ήταν δύσκολο να στείλεις κάτι compileable; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
kfoynt Δημοσ. 23 Ιουλίου 2010 Μέλος Share Δημοσ. 23 Ιουλίου 2010 θα ήταν δύσκολο να στείλεις κάτι compileable; Δυστυχώς ναι, θα πρέπει να πάρω άδεια πρώτα. To -O2 option κάνει αυτό: Do not use compiler optimization directive such as "-O" or "-O2" which rearrange computing operations to gain speed as this reordering will not match the order of execution in the source code and it may be impossible to follow. και μάλλον αυτό ειναι και το πρόβλημα? τι γνώμη έχετε? Edit: Ναι, μπορώ να το τρέξω και χωρίς αυτό, αλλά ο κόσμος εκει έξω είναι πολύ ανταγωνιστικός Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
ippo00 Δημοσ. 23 Ιουλίου 2010 Share Δημοσ. 23 Ιουλίου 2010 καλό debugging λοιπόν Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
kfoynt Δημοσ. 23 Ιουλίου 2010 Μέλος Share Δημοσ. 23 Ιουλίου 2010 καλό debugging λοιπόν κρίμα.. θα ήθελα να ακούσω κάτι πιο ενθαρρυντικό Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
nplatis Δημοσ. 23 Ιουλίου 2010 Share Δημοσ. 23 Ιουλίου 2010 Η επιλογή -O2 κανονικά δεν πρέπει να προκαλεί τέτοιες παρενέργειες. Μάλλον λάθος στον κώδικα υπάρχει... Χρησιμοποιείς την επιλογή -Wall; Συχνά δείχνει χρήσιμα πράγματα. Επίσης: είσαι απόλυτα σίγουρος ότι με το -O2 κερδίζεις στην πράξη στην εφαρμογή σου; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
kfoynt Δημοσ. 23 Ιουλίου 2010 Μέλος Share Δημοσ. 23 Ιουλίου 2010 Η επιλογή -O2 κανονικά δεν πρέπει να προκαλεί τέτοιες παρενέργειες. Μάλλον λάθος στον κώδικα υπάρχει... Χρησιμοποιείς την επιλογή -Wall; Συχνά δείχνει χρήσιμα πράγματα. Επίσης: είσαι απόλυτα σίγουρος ότι με το -O2 κερδίζεις στην πράξη στην εφαρμογή σου; Οχι την -Wall δεν την έχω δοκιμάσει, αλλα το πρωί με το καλο θα την δοκιμάσω, δεν έχω να χάσω κάτι. Η εφαρμογή είναι 20 χρονών δουλεια κάποιου καθηγητή, για να έχει βάλει το -O2 λογικά κάτι θα ξέρει, αλλα θα το διπλοτσεκάρω. Τώρα για το αν έχω λάθος, και έγω το ίδιο πίστευα... αλλα οι εντολές που εκτελώ και μου δινουν το segmentation ειναι πολύ απλές + αν βγάλω το -Ο2 δουλεύει αρα? μάλλον θα φταιει αυτό που έκανα quote πιο πάνω και χρειάζομαι καλύτερη διαχείριση των μεταβλητών για να ταιριάζει με την ροή του -Ο2? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
ippo00 Δημοσ. 23 Ιουλίου 2010 Share Δημοσ. 23 Ιουλίου 2010 Αμφιβάλλω ότι φταίει από μόνο του το Ο2. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
nplatis Δημοσ. 23 Ιουλίου 2010 Share Δημοσ. 23 Ιουλίου 2010 Δεν ξέρω πού βρήκες αυτό το σχόλιο, γενικά το -O2 θεωρείται μάλλον ασφαλές. Κάτι ακόμα: μήπως η εφαρμογή αποτελείται από πολλά αρχεία κώδικα; Αν ναι, μην ξεχνάς να τα κάνεις όλα compile από την αρχή εφόσον αλλάζεις τέτοιες παραμέτρους. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
ippo00 Δημοσ. 23 Ιουλίου 2010 Share Δημοσ. 23 Ιουλίου 2010 Επειδή παω για ύπνο, θα τολμίσω να πω ότι κανείς δεν θα μυρίσει τα νύχια του να το λύσει. Δεν το έννοο με τον αγενή τρόπο αλλά αν δεν μπορείς έστω να στίλεις binary με τα debugging symbols.. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
jstark Δημοσ. 23 Ιουλίου 2010 Share Δημοσ. 23 Ιουλίου 2010 Τσέκαρε το με το valgrind, αν μπορείς. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Evgenios1 Δημοσ. 23 Ιουλίου 2010 Share Δημοσ. 23 Ιουλίου 2010 L->lvar = var; Αντι για αυτο βαλε > __asm { mov ecx,dword ptr [var] mov eax,dword ptr [L] mov dword ptr [eax+(Το offset του lvar)],ecx } Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.