Allocation dynamique

stan4950 Messages postés 10 Date d'inscription vendredi 15 novembre 2013 Statut Membre Dernière intervention 26 novembre 2013 - Modifié par BunoCS le 25/11/2013 à 19:12
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 26 nov. 2013 à 10:49
Bonsoir à tous,



Je fais actuellement un mini projet dans le cadre de mes études sur l'élaboration d'un jeu en C++. J'ai bien déclaré mes tableaux, initialisé mes tableaux etc....(et oui je suis débutant)!!^^ En clair j'ai a partir d'une fonction située dans le main de type switch do, le choix de choisir entre 3 grilles (tableaux) :

4 lignes par 4 colonnes avec 2 lettres

4 lignes par 9 colonnes avec 5 lettres

9 lignes par 9 colonnes avec 6 lettres

Le problème est que quand je lance la derniere grille (9x9) tout se passe bien, sa se compile et sa s'affiche a l'écran. En revanche pour la grille 4x4 sa s'affiche une fois sur 20 et pour la grille 4x9 sa me génére une erreur : violation etc.....

Après avoir passé l'aprem autour de ce problème, j'en ai conclu que j'ai du mal faire l'allocation dynamique, parce que j'avais oublié de taper if([T]=NULL); return T; et lorsque je l'ai fait les 3 grilles se génèrent mais aucune valeur s'affiche par contre....



Ci après une capture de comment mon allocation est faite





T = (int **)malloc(n1 * sizeof(int*));

for (i=0; i<n1; i++)
    T[i] = (int *)malloc(n2 * sizeof(int));

if (T[i] == NULL)
    printf("Allocation dynamique impossible");

return T;

6 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
25 nov. 2013 à 19:14
Hello,

J'ai rajouté les balises code dans ton message (les explications sont ici, merci d'y penser la prochaine fois ;) ).

On voit bien que ton if est en dehors de ta boucle. Ton, ton index i est invalide.

Tu dis que tu utilises une condition switch...as-tu bien pensé à mettre des break?
0
stan4950 Messages postés 10 Date d'inscription vendredi 15 novembre 2013 Statut Membre Dernière intervention 26 novembre 2013
25 nov. 2013 à 20:29
Excuse moi je ne le savais pas ... Pour ce qui est du if, j'ai rajouté des accolades après ma boucle for et après return mais rien n'y fait. Oui j'avais bien mis mes break .
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
25 nov. 2013 à 22:59
Excuse moi je ne le savais pas ...
Pas de souci, je suis là pour guider ;)

Peux-tu nous poster ton code, s'il n'est pas trop gros?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
26 nov. 2013 à 00:35
Pour info, c'est la suite de: http://codes-sources.commentcamarche.net/forum/affich-10012139-generer-une-grille-pour-un-jeu-de-type-candy-crush

Pourquoi ne pas continuer à poster sur ce sujet au lieu d'en recréer de nouveaux ?
De plus, je t'ai proposé une solution pas à pas pour réaliser ton projet, cela ne convient pas ? J'ai déjà réalisé le projet, je ne vais bien évidemment pas te le donner, mais je peux aisément te guider.

(Si tu pars sur du malloc, tu es déjà mal barré, comme déjà dit précedemment).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
stan4950 Messages postés 10 Date d'inscription vendredi 15 novembre 2013 Statut Membre Dernière intervention 26 novembre 2013
26 nov. 2013 à 07:28
Je dois partir du malloc, c'est une étape qui m'est imposée...
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 26/11/2013 à 18:18
Je dois partir du malloc, c'est une étape qui m'est imposée...
Pourquoi ne pas l'avoir dit avant ?

Ça ne change pas grand chose. Au final, tu remplaces le std::vector par un malloc (à une dimension) dans la classe Array2D. La technique décrite dans mon mail est la même.
0
Rejoignez-nous