kaliakman Δημοσ. 18 Φεβρουαρίου 2016 Δημοσ. 18 Φεβρουαρίου 2016 Πρώτα από όλα καλησπέρα, Έφτιαξα μια συνάρτηση για να κάνω free ένα board που χρησιμοποιώ και χρειάζεται συχνά να ξαναφτιαχτεί. Το θέμα είναι οτί ο gdb μου βγάζει error λέγωντας:Cannot find bounds of current function στην free μέσα στο loop.Το έψαξα λίγο αλλά δεν έβγαλα άκρη.. void freeboard(char** board,int sizeBoard){ int i; for (i=0;i<2*sizeBoard+1;i++) free(board[i]); free(board); } Είναι 5 γραμμές και είμαι σίγουρος πως έχω κάνει uber μαλα@@ αλλά δεν μπορώ να το βρω με τίποτα.. Tip: Το sizeBoard δεν υπερβαίνει το 25 γιατί κάπου διάβασα οτί μπορεί να το πάθει με μεγάλο νούμερο.
gon1332 Δημοσ. 18 Φεβρουαρίου 2016 Δημοσ. 18 Φεβρουαρίου 2016 Πρώτα από όλα καλησπέρα, Έφτιαξα μια συνάρτηση για να κάνω free ένα board που χρησιμοποιώ και χρειάζεται συχνά να ξαναφτιαχτεί. Το θέμα είναι οτί ο gdb μου βγάζει error λέγωντας:Cannot find bounds of current function στην free μέσα στο loop.Το έψαξα λίγο αλλά δεν έβγαλα άκρη.. void freeboard(char** board,int sizeBoard){ int i; for (i=0;i<2*sizeBoard+1;i++) free(board[i]); free(board); } Είναι 5 γραμμές και είμαι σίγουρος πως έχω κάνει uber μαλα@@ αλλά δεν μπορώ να το βρω με τίποτα.. Tip: Το sizeBoard δεν υπερβαίνει το 25 γιατί κάπου διάβασα οτί μπορεί να το πάθει με μεγάλο νούμερο. Τι είναι το sizeBoard; Τι μέγεθος έχει το board; Έχω την εντύπωση πως φταίει το +1. Επίσης το 2Χ μου φαίνεται πολύ υποπτο. Για δώσε δέσμευση μνήμης για το board.
kaliakman Δημοσ. 18 Φεβρουαρίου 2016 Μέλος Δημοσ. 18 Φεβρουαρίου 2016 Τι είναι το sizeBoard; Τι μέγεθος έχει το board; Έχω την εντύπωση πως φταίει το +1. Επίσης το 2Χ μου φαίνεται πολύ υποπτο. Για δώσε δέσμευση μνήμης για το board. Το θέμα είναι οτί ο debugger χτυπάει ακόμα και με i=0 αλλά δες: char** board; int i; board=malloc((2*sizeBoard + 1) * sizeof(char *)); if (board==NULL){ printf("Not Enough Memory.Exiting\n\n"); exit(0); } for (i=0;i< 2*sizeBoard + 1 ;i++){ board[i]=malloc(4*sizeBoard * sizeof(char)); if (board[i]==NULL) { printf("Not Enough Memory.Exiting.\n\n"); exit(0); } }
gon1332 Δημοσ. 18 Φεβρουαρίου 2016 Δημοσ. 18 Φεβρουαρίου 2016 Δε ξέρω αν μου ξέφυγε κάτι, αλλά φαίνεται ΟΚ. Με segfault σου τερματίζει; Πιστεύω πως κάτι κάνεις όταν διαχειρίζεσαι τον πίνακα. Δηλαδή δε φταίει η free. Απλά η free σου ξεσκέπασε bug. Έτσι συμβαίνει συνήθως. 1
kaliakman Δημοσ. 18 Φεβρουαρίου 2016 Μέλος Δημοσ. 18 Φεβρουαρίου 2016 Το θέμα είναι οτί απλά τον γεμίζω πριν γίνει το συγκεκριμένο.. Τέλος πάντων σε ευχαριστώ!! btw με αυτό τερματίζει SIGTRAP, Trace/breakpoint trap.
AlexHello Δημοσ. 18 Φεβρουαρίου 2016 Δημοσ. 18 Φεβρουαρίου 2016 Κανένα θέμα σε Visual C++ 18.00.31101, με visual leak detector για memory leaks, παρ΄ εκτός και γίνεται corrupted to heap προηγουμένως...
kaliakman Δημοσ. 18 Φεβρουαρίου 2016 Μέλος Δημοσ. 18 Φεβρουαρίου 2016 for (i=0;i<2*sizeBoard + 1;i++){ for (j=0;j<4*sizeBoard + 1;j++){ //blabla } } board[1][((4*sizeBoard) / 2)] = ' '; board[(2*sizeBoard) - 1][(4*sizeBoard) / 2] = ' '; Μόνο αυτο συμβαίνει στο board πριν τρέξει η freeboard. Όπου blabla έχει συμπλήρωση με διάφορα if και board[j].
gon1332 Δημοσ. 18 Φεβρουαρίου 2016 Δημοσ. 18 Φεβρουαρίου 2016 Αν το sizeBoard είναι 0 τότε έχεις σίγουρα θέμα. Επίσης στο εμφωλευμένο for το j πάει μία θέση παραπέρα και αν το χρησιμοποιείς μέσα έτσι τότε κακώς το κάνεις. Είχες δεσμεύσει 4*sizeBoard θέσεις. 1
kaliakman Δημοσ. 18 Φεβρουαρίου 2016 Μέλος Δημοσ. 18 Φεβρουαρίου 2016 Το sizeboard είναι από default 5 και μπορεί να αλλάξει με εντολή.. Εκει κιόλας έιναι το θέμα.. Κάνω free για να τον ξαναδημιουργήσω με άλλο μέγεθος.. Επίσης στο εμφωλευμένο for το j πάει μία θέση παραπέρα και αν το χρησιμοποιείς μέσα έτσι τότε κακώς το κάνεις. Είχες δεσμεύσει 4*sizeBoard θέσεις. Να σαι καλά... Ναι ήθελε + 1 στην malloc και δεν το είχα δει επειδή στην αρχή το είχα σκέτο και μετά το έκανα συνάρτηση και δεν το ξανακοίταξα..
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα