Pointeur de pointeur

[Fermé]
Signaler
-
 rer_moh -
Bonjour,
Qui peux m’aider
Je ne comprends pas pourquoi cela ne marche pas
Voila le bout de programme simplifié, je complète le tableau avec une série de chiffre (juste pour l'exemple).
Apparemment le probleme viendrai du Data++ ??????????
Merci pour votre réponse

u_int16 **Data;
u_int16 x,y;
// Dimension X
x = 5;
Data = (u_int16**) malloc (x * sizeof(u_int16*));

// Dimension Y
y = 3;
for (i=0;i<x;i++)
Data[i] = (u_int16*) malloc(y * sizeof(u_int16));


for (i=0;i<x;i++)
{
for (j=0;j<y; j++)
*Data[j] = j+10*(x+i);

Data++;
}
free (Data);

2 réponses

Oui vous avez tout a fait raison pour la liberation de la memoire allouée.
il faut une boucle pour liberer les Data[i];
J'ai trouver pour l'incrementation il faut mettre à la place de Data++ ---> Data[i]++
Mais je n'arrive pas toujours a comprendre le Data[i]++ !!!!!
Data[i] je comprends , cela veut dire prendre le contenu à l'indexe i, qui correspond a une adresse
mais le ++ ???
A mois que cela consiste a incrementer l'adressse du pointeur Data et d'en prendre le contenu ???
j'ai essayer une autre syntaxe et cela marche *(Data)++;
Pouvez vous me dire pourquoi que cela marche ???
Vous en remerciant
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
123
Bonjour,

Il y a quelques petites choses maladroites.

Il doit toujours y avoir une correspondance un malloc = 1 free. il faut donc aussi une boucle pour faire des free puis seulement le free(Data);

Le Data++ est gênant car le free ne reçoit plus la bonne adresse, celle donnée par le malloc.

La boucle est très difficile à comprendre et je pense qu'elle dépasse les limites du tableau.

Après le premier tour:

Data = 
{
50, ??, ??,
51, ??, ??,
52, ??, ??,
??, ??, ??,
??, ??, ??,
}


Après le deuxième:

Data = 
{
50, ??, ??
60, ??, ??,
61, ??, ??,
62, ??, ??,
??, ??, ??
}


Après le cinquième

Data = 
{
50, ??, ??,
60, ??, ??,
70, ??, ??,
80, ??, ??,
90, ??, ??
}
91, ??, ??,    // dépassement
92, ??, ??


Je pense qu'il serait mieux de ré-écrire la double boucle en utilisant la notation Data[i][j] = ...
(Ou Data[j][0] qui reprend ton cas)

Quel est le résultat voulu ?

M.

EDIT. Les ?? représentent des données jamais écrites donc à supposer inconnues.