Pbm pointeurs

adeline11 Messages postés 58 Statut Membre -  
adeline11 Messages postés 58 Statut Membre -
Bonjour,
Je souhaiterai supprimer le dernier element d'un tableau de pointeurs et je n'ai aucune idée de comment faire. Pouvez vous m'aider? Merci d'avance de votre réponse

9 réponses

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut,
En quel langage ? En C ?
En C :
char *tab[]={"premier","deuxieme","troisieme"};
tab[sizeof tab/sizeof *tab - 1]=NULL;
0
adeline11 Messages postés 58 Statut Membre 34
 
oui pardon, c'est en C++
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Bien, je t'ai donné la méthode ;-).
Tu mets un NULL à la dernière case en prenant soin de faire un delete si nécessaire pour la libération de la mémoire.
Tu ne peux pas réduire la taille d'un tableau à moins de faire une recopie dans un tableau plus court.
Par contre si tu utilises un pointeur sur une zone du tas, tu pourras réduire dynamiquement la taille de la zone allouée.
0
adeline11 Messages postés 58 Statut Membre 34
 
J'ai utilisé le NULL et j'ai une erreur à la compilation :(
Voila mon code:

void Boite:: supprimerPoint( const Point & p)
{
bool existe=false;
int i=0;
while(i<my_nb_points && !existe)
{
if(p.getX()==my_points[i].getX() || p.getY()==my_points[i].getY())
existe=true;
i++;
}

if(existe)
for(int j=my_nb_points; j>i; j++)
my_points[i-1]=my_points[i];
my_points[5]=NULL;
}
0

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

Posez votre question
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Peux-tu donner la déclaration de my_points ? Son nombre de cases, ...
0
adeline11 Messages postés 58 Statut Membre 34
 
en fait c'est une variable. Pour l'instant, elle vaut 8. Mais je pense que je devrai plutot utiliser un delete sur la 8ème case non? Je ne sais pas comment on fait pour utiliser le delete sans effacer tout le tableau.
0
adeline11 Messages postés 58 Statut Membre 34
 
Je viens de comprendre ce qui ne plais pas au compilateur. En réalité my_points est un tableau de points (c'est une classe que j'utilise), je n'ai donc pas le droit de dire "my_points=..." si ce n'est pas un point que je met après le =. C'est pourquoi je voudrais utiliser un delete
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Ah, d'accord. Au début t'avais dit un tableau de pointeurs, donc ça change tout.
En fait, tu as simplement un tableau d'objets. Et tu ne pourras pas réduire sa taille.
Donc tu fais un delete de la case que tu veux, ceci libérera la mémoire consommée par l'objet. Mais cela ne réduira pas le tableau. Après, c'est à toi de gérer le fait qu'il ne faut plus utiliser telle ou telle indice. En l'occurrence, s'il s'agit du dernier élément, tu réduis la taille d'une variable comprenant le nombre d'élément du tableau.
Après, si tu veux à tout pris pouvoir vraiment supprimer une case spécifique, il est plus commode d'utiliser des listes chaînées.
0
adeline11 Messages postés 58 Statut Membre 34
 
non lol. Je suis pas très douée pour m'expliquer, en réalité c'est un tableau de pointeurs qui pointe vers des points. Je sais ce n'est pas simple surtout que je débute^^ Il me faudrait un fonction qui supprime le dernier point du tableau mais je n'ai pas besoin de changer sa taille. En clair je veut supprimer un point, et ces points son stockés dans un tableau dynamique. Mon prof m'a expliqué qu'on ne peut pas supprimer un élément au milieu d'un tableau dynamique, mais il doit y avoir un moyen de supprimer celui qui est sur le dessus de la pile. Encore merci pour ta patience
0