Pointeur de pointeur
rer_moh
-
rer_moh -
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);
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);
A voir également:
- Pointeur de pointeur
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Le pointeur de mon pc portable ne marche plus - Guide
- Le pointeur de la souris - Guide
- Pointeur souris disparu pc portable ✓ - Forum Windows 10
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
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
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:
Après le deuxième:
Après le cinquième
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.
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.