Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » An exception occured!
Gladosse Hors ligne Membre Points: 169 Défis: 2 Message

An exception occured!

Posté le 01/01/2022 14:17

void gen_board(struct Board *brd){
    int height = brd->height;
    int width = brd->width;

    brd->board_state = malloc(sizeof(struct Cell*) * height);
    for(int i=0; i<height; i++){
        brd->board_state[i] = malloc(sizeof(struct Cell) * width);
    }

    srand(rtc_ticks());
    for(int v=0;v<height;v++){
        for(int z=0;z<width;z++){
            brd->board_state[v][z].value=0; //assign all cells 0 (no mine)
            brd->board_state[v][z].state=0;
        }
    }
    for(int i=0; i<brd->nmines; i++){
        int y = rand()%brd->height;
        int x = rand()%brd->width;
        brd->board_state[y][x].value = 69; //assign nmines number of random cells 69 so it's a mine
        for(int v=y-1;v<=y+1;v++){
            for(int z=x-1;v<=y+1;v++){
                if(!(v==y && x==z))
                    if(brd->board_state[v][z].value!=69)
                        brd->board_state[v][z].value++;
            }
        }
    }
}
(ames sensibles s'abstenir, je suis tres inattentif )

je ne manipule la memoire que dans ce bout de code, et la calculatrice me renvoit cette erreur



Gladosse Hors ligne Membre Points: 169 Défis: 2 Message

Citer : Posté le 01/01/2022 14:17 | #


Lephenixnoir Hors ligne Administrateur Points: 22758 Défis: 149 Message

Citer : Posté le 01/01/2022 14:20 | #


         for(int v=y-1;v<=y+1;v++){
            for(int z=x-1;v<=y+1;v++){

Tu autorises (x,y) à être n'importe quelle case du plateau. Mais du coup si la case est sur un bord alors les lignes y-1, y+1, ou les colonnes x-1, x+1, peuvent être invalides. Il semble probable que ce soit ce dépassement de tableau qui produise (indirectement) l'erreur.

Edit : la deuxième boucle est aussi copiée/collée d'une façon très suspecte.
Gladosse Hors ligne Membre Points: 169 Défis: 2 Message

Citer : Posté le 01/01/2022 14:21 | #


Lephenixnoir a écrit :
         for(int v=y-1;v<=y+1;v++){
            for(int z=x-1;v<=y+1;v++){

Tu autorises (x,y) à être n'importe quelle case du plateau. Mais du coup si la case est sur un bord alors les lignes y-1, y+1, ou les colonnes x-1, x+1, peuvent être invalides. Il semble probable que ce soit ce dépassement de tableau qui produise (indirectement) l'erreur.

Edit : la deuxième boucle est aussi copiée/collée d'une façon très suspecte.


oui en me relisant j'ai pense a la possibilte que ca soit une mine, mais c'est vrai que ca peut aussi depasser les bords

merci en tout cas

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 45 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd