Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Πρώτα από όλα καλησπέρα,

 

Έφτιαξα μια συνάρτηση για να κάνω 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 γιατί κάπου διάβασα οτί μπορεί να το πάθει με μεγάλο νούμερο.

Δημοσ.

Πρώτα από όλα καλησπέρα,

 

Έφτιαξα μια συνάρτηση για να κάνω 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.

Δημοσ.

Τι είναι το 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);
        }
    }
Δημοσ.

Δε ξέρω αν μου ξέφυγε κάτι, αλλά φαίνεται ΟΚ.

 

Με segfault σου τερματίζει; Πιστεύω πως κάτι κάνεις όταν διαχειρίζεσαι τον πίνακα. Δηλαδή δε φταίει η free. Απλά η free σου ξεσκέπασε bug. Έτσι συμβαίνει συνήθως.

  • Like 1
Δημοσ.

Το θέμα είναι οτί απλά τον γεμίζω πριν γίνει το συγκεκριμένο.. Τέλος πάντων σε ευχαριστώ!!

 

btw με αυτό τερματίζει SIGTRAP, Trace/breakpoint trap.
 

Δημοσ.
    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].

Δημοσ.

Αν το sizeBoard είναι 0 τότε έχεις σίγουρα θέμα.

 

Επίσης στο εμφωλευμένο for το j πάει μία θέση παραπέρα και αν το χρησιμοποιείς μέσα έτσι τότε κακώς το κάνεις. Είχες δεσμεύσει 4*sizeBoard θέσεις.

  • Like 1
Δημοσ.

Το sizeboard είναι από default 5 και μπορεί να αλλάξει με εντολή.. Εκει κιόλας έιναι το θέμα.. Κάνω free για να τον ξαναδημιουργήσω με άλλο μέγεθος..


Επίσης στο εμφωλευμένο for το j πάει μία θέση παραπέρα και αν το χρησιμοποιείς μέσα έτσι τότε κακώς το κάνεις. Είχες δεσμεύσει 4*sizeBoard θέσεις.

Να σαι καλά... Ναι ήθελε  + 1 στην malloc και δεν το είχα δει επειδή στην αρχή το είχα σκέτο και μετά το έκανα συνάρτηση και δεν το ξανακοίταξα..

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...