BOnjour,
j'ai une question par rapport au malloc , si je malloc un int **
pour mon tableau de 10x10, donc un malloc(sizeof(int*) * 100);
et que je n'utilise qu'une partie de la memoire alloué par
exemple je m'arrete a la case 50 et je fais tab[50] == NULL
pour lui dire la fin de mon tableau donc je n'utilise que 50
case sur 100
est ce que le reste sera free automatiquement ? je sais pas
comment vider le reste, est ce que sa peux poser des problèmes ? d'alloué de l'espace mémoire pour rien
http://www.eskimo.com/~scs/cclass/int/sx9b.html
Pour allouer et libérer dynamiquement un tableau dimensionnel.
Tu dois jouer dessallouer ce qui a été alloué. Donc non mettre une case a NULL ne changera rien.
Quand tu alloues ton tableau tu demande un bout de mémoire pour pouvoir y caller ton tableau, et on te retourne un pointeur vers le début de la zone en mémoire.
Si tu en utilises 10% c'est ton problème, mais la zone est toujours réservé.
donc ce que je peux faire c'est de free le reste?
A partir de 50 je fais
tab[i] = NULL // i = 50 a ce moment la
i = i + 1
while (i != 100) // while(tab[i] != NULL)
{
free(tab[i]);
i++;
} c'est possible de faire comme sa?
Tout l'intêret de l'allocation dynamique c'est d'alouer juste ce dont tu as besoin...
Pourquoi tu fais pas malloc(sizeof(int*) * 50); ?
Ou encore mieux int * tab[50];
je fais un tableau d'int ** pour stocker chaque coordonnées en x et y de la cellule de mon labyrinthe visité
donc si j'ai un labyrinthe de 10x10 j'aurai un tableau d'int de
10x10, mais ce tableau va contenir seulement le chemin du
labyrinthe,
par exemple j'ai une grille de 3x3, donc j'alloue mon tableau d'int de 9,
lorsque je parcour ma grille, je rajoute les coordonnées x et y de ma cellule ou de ma case,
je commence en 1,1 si j'arrive en 1,3, dans mon tableau d'int il y aura : (x,y)
tab[0][0] = 1 //(x)
tab[0][1] = 1 //(y)
tab[1][0] = 1;
tab[1][1] = 2;
tab[2][0] = 1;
tab[2][1] = 3;
ensuite si je n'ai plus d'options (droite, haut, bas, gauche)
je vais reprendre les coordonées d'avant pour check si il y a une solution,
si il y a une solution, je vais remplacer tab[2] par les nouvelles coordonnées ainsi de suite
ou sinon je retourne encore en arriere dans mon tableau pour récuperer les anciennes coordonnés,
je ne sais pas combien de cases j'aurai besoin exactement pour le chemin du labyrinthe du coup je malloc la taille max
http://fr.wikipedia.org/wiki/Mod%C3%A9lisation_math%C3%A9matique_d'un_labyrinthe#mediaviewer/File:Yl_maze_ani_algo2.gif
je fais sa exactement et a chaque cellule je recupere les coordonnées, lorsque je me trouve dans un cu de sac (lorsqu'il n'y a aucune option)
je remplace les coordonnées actuelle par les nouvelles dans le tableau
je ne met pas en dur car sa va me servir pour faire un jeu sur iphone et le joueur pourra choisir son niveau de difficulté et je le gere en fonction de sa