Matrice en argument d'une fonction!
Résolu/Fermé
karludwig
Messages postés
6
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
18 janvier 2009
-
17 janv. 2009 à 18:57
karludwig Messages postés 6 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 18 janvier 2009 - 18 janv. 2009 à 18:30
karludwig Messages postés 6 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 18 janvier 2009 - 18 janv. 2009 à 18:30
A voir également:
- Matrice en argument d'une fonction!
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Vous ne pouvez pas modifier une partie de matrice - Forum Excel
- Comment colorer une cellule excel en fonction du contenu d'une autre cellule ✓ - Forum Excel
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
8 réponses
Ijkan
Messages postés
471
Date d'inscription
samedi 6 septembre 2008
Statut
Membre
Dernière intervention
20 janvier 2022
53
17 janv. 2009 à 18:57
17 janv. 2009 à 18:57
rien pigé
Ijkan
Messages postés
471
Date d'inscription
samedi 6 septembre 2008
Statut
Membre
Dernière intervention
20 janvier 2022
53
17 janv. 2009 à 19:17
17 janv. 2009 à 19:17
en clair qu'est ce que tu veut faire??
karludwig
Messages postés
6
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
18 janvier 2009
17 janv. 2009 à 19:33
17 janv. 2009 à 19:33
Pffff... de quoi j'ai l'air!
Tout d'abord : merci!
J'ai rectifié, j'ai bien mis le free à la toute fin du programme et comme ça le petit programme d'exemple tourne sans problème...
Donc mon problème est ailleurs :
En fait j'ai une fonction qui modifie la matrice, et une qui l'affiche.
et quand je fais dans le main:
La matrice est affichée deux fois de façon identique... sniif
Serait-ce le compilateur qui me remplace dans la fonction affiche(matrice), les matice[i][j] par leurs valeurs?
Le but est de programmer un arbitrage d'othello (pour l'instant 'B' pour blanc et 'N' pour noir dans la matrice qui est le plateau de jeu).
Encore merci!
Tout d'abord : merci!
J'ai rectifié, j'ai bien mis le free à la toute fin du programme et comme ça le petit programme d'exemple tourne sans problème...
Donc mon problème est ailleurs :
En fait j'ai une fonction qui modifie la matrice, et une qui l'affiche.
et quand je fais dans le main:
affiche (matrice); modifie(matrice); affiche(matrice);
La matrice est affichée deux fois de façon identique... sniif
Serait-ce le compilateur qui me remplace dans la fonction affiche(matrice), les matice[i][j] par leurs valeurs?
Le but est de programmer un arbitrage d'othello (pour l'instant 'B' pour blanc et 'N' pour noir dans la matrice qui est le plateau de jeu).
Encore merci!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
17 janv. 2009 à 19:39
17 janv. 2009 à 19:39
Salut,
Comme dit précédemment, ton free devrait se situer à la fin. Et en plus la déclaration de ton tableau est fausse.
Tu dois plutôt faire :
N'oublie pas de tester si l'allocation échoue ou pas, en testant si le pointeur vaut NULL ou pas afin d'éviter des segfaults bêtes.
Comme dit précédemment, ton free devrait se situer à la fin. Et en plus la déclaration de ton tableau est fausse.
Tu dois plutôt faire :
//allocation matrice=malloc(N); for(int i=0;i<N;i++) matrice[i]=malloc(N); //désallocation for(int i=0;i<N;i++) free(matrice[i]); free(matrice);
N'oublie pas de tester si l'allocation échoue ou pas, en testant si le pointeur vaut NULL ou pas afin d'éviter des segfaults bêtes.
karludwig
Messages postés
6
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
18 janvier 2009
17 janv. 2009 à 19:52
17 janv. 2009 à 19:52
Donc après modification voilà mon allocation :
et la désallocation :
Mais, rien ne bouge au niveau de mon affichage...!
char** m = (char**) malloc(n * n * sizeof(char)); for (i = 0; i < n; i++) m[i] = (char*) malloc(n * sizeof(char));
et la désallocation :
for (i = 0; i < n; i++) free(m[i]); free(m);
Mais, rien ne bouge au niveau de mon affichage...!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
17 janv. 2009 à 19:56
17 janv. 2009 à 19:56
char** m = (char**) malloc(n * n * sizeof(char));
Il faut mettre malloc(n*sizeof(char*)) (pas malloc(n*n)). Sinon ça te fait un tableau n*n lignes, n colonnes.
Sinon, mets ton programme avec ta fonction affichage qu'on puisse voir d'où vient l'erreur.
Il faut mettre malloc(n*sizeof(char*)) (pas malloc(n*n)). Sinon ça te fait un tableau n*n lignes, n colonnes.
Sinon, mets ton programme avec ta fonction affichage qu'on puisse voir d'où vient l'erreur.
karludwig
Messages postés
6
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
18 janvier 2009
17 janv. 2009 à 20:12
17 janv. 2009 à 20:12
Si je change malloc(n*n*sizeof(char)) par malloc(n*sizeof(char)), il plante à l'exécution...
J'ai testé ma fonction d'affichage qui apparemment marche parfaitement, ce doit être ma fonction de modification de la matrice qui plante. Je la relis une n ième fois, et je retourne vers vous si je continue à bloquer!
J'ai testé ma fonction d'affichage qui apparemment marche parfaitement, ce doit être ma fonction de modification de la matrice qui plante. Je la relis une n ième fois, et je retourne vers vous si je continue à bloquer!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
17 janv. 2009 à 20:46
17 janv. 2009 à 20:46
En fait, j'ai fait une erreur d'inattention.
Il faut faire :
Mais ça ne corrigera pas ton erreur par rapport à ton n*n*sizeof... Jusque ça allouerait la bonne quantité.
Il faut faire :
matrice=malloc(n*sizeof(char*)); for(int i=0;i<n;i++) matrice[i]=malloc(n);
Mais ça ne corrigera pas ton erreur par rapport à ton n*n*sizeof... Jusque ça allouerait la bonne quantité.
J'ai rectifié, j'ai bien mis le free à la toute fin du programme et comme ça le petit programme d'exemple tourne sans problème. J'ai du mal à le croire. Ton allocation est un non sens.
Celle de fiddy est correcte, sauf qu'il a oublié de tenir compte de la taille des variables :
Celle de fiddy est correcte, sauf qu'il a oublié de tenir compte de la taille des variables :
char** m = (char**) malloc(n * sizeof(char *)); for (i = 0; i < n; i++) m[i] = (char*) malloc(n * sizeof(char));
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
17 janv. 2009 à 20:56
17 janv. 2009 à 20:56
Je n'ai rien oublié ;), on la même version (post 10). ^^.
toto
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
17 janv. 2009 à 21:02
17 janv. 2009 à 21:02
pardon, j'ai mis longtemps à écrire le message et je n'ai pas vérifié au moment de poster que tu avais déjà rectifié.
karludwig
Messages postés
6
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
18 janvier 2009
18 janv. 2009 à 18:30
18 janv. 2009 à 18:30
Merci beaucoup pour votre aide à propos de l'allocation de la mémoire!
Il subsistait un bug dans la fonction de modification de la matrice (une règle du jeu mal formalisée) et il est maintenant réparé!
Merci à tous pour votre aide précieuse!
Il subsistait un bug dans la fonction de modification de la matrice (une règle du jeu mal formalisée) et il est maintenant réparé!
Merci à tous pour votre aide précieuse!
17 janv. 2009 à 19:04
et bien :
C'est plus clair comme ça?
17 janv. 2009 à 19:16
Là on est sûr que ça va planter ;=))
Pourquoi ?
Tout simplement qu'après le 'free' il ne faut plus toucher à la variable libérée.