pointeurs [c++] - C++ - Programmation
Marsh Posté le 27-01-2003 à 21:27:37
Là, de temps en temps, tu vas te taper une jolie runtime error.
Marsh Posté le 27-01-2003 à 21:28:43
Et puis ton delete qui correspond pas au new...enfin bref, la cata...Sinon c'est coherent pour un mix C/C++
Marsh Posté le 27-01-2003 à 21:36:41
avec un cout, on n'utilise pas "\n" mais endl
pourquoi utiliser stdio.h et string.h avec iostream.h ?
soit dit en passant, un t = new int[n] alors que tu n'as pas encore donné de valeur à n, c'est impardonnable
De plus, il faudrait blinder ton programme contre un n trops grand !
Puis j'appele pas ça incrémenter
Marsh Posté le 28-01-2003 à 06:45:18
Code :
|
J'abandonne...
Code :
|
D'où il sort ce 50 ?
Code :
|
Ce serait bien avec les contenurs et algorithmes standard, des patrons, des objet fonctions...
Mais bon, si t'en est au pointeur ça peut se faire en C.
Marsh Posté le 28-01-2003 à 09:20:46
kjus : suis pas sur que le [] soit obligatoire dans le cas présent
Marsh Posté le 28-01-2003 à 18:27:19
je ne connais pas très bien l'histoire des new et delete. (j'utilise plutot malloc...), mais il me semble bien que après avoir alloué avec new [], il faut désallouer avec delete[];
Marsh Posté le 28-01-2003 à 18:32:26
faut surtout pas que Taz voie ce topic, sinon il va falloir le ranimer
Marsh Posté le 28-01-2003 à 19:09:02
suis pas sur, mais je crois que [] sert à appeler les destructeurs des membres qui sont des classes... inutile dans le cas d'un int
Marsh Posté le 29-01-2003 à 00:42:23
Si il voit ça c'est le coma direct !
Code :
|
Celui qui se croit malin en faisant des mélanges "pasque ça marche chez moi" s'expose à de graves désillusions.
Même si le tableau est de dimension 1.
Marsh Posté le 29-01-2003 à 08:04:19
Musaran a écrit : Si il voit ça c'est le coma direct !
Celui qui se croit malin en faisant des mélanges "pasque ça marche chez moi" s'expose à de graves désillusions. |
Marsh Posté le 29-01-2003 à 08:20:53
Harkonnen a écrit : faut surtout pas que Taz voie ce topic, sinon il va falloir le ranimer |
Marsh Posté le 29-01-2003 à 09:42:32
kjus : c'est un tableau d'int, le [] de delete se rapporte aux tableaux de classes.
http://www.glenmccl.com/bett_003.htm (en bas de page )
...
What makes this a bit tricky is that all of this work of calling constructors and destructors doesn't matter for fundamental data types like int:
int* ip;
ip = new int[100];
delete ip;
This code will work in many cases, because there are no destructors to call, and deleting a block of storage works pretty much the same whether it's treated as an array of ints or a single large chunk of bytes
...
Marsh Posté le 29-01-2003 à 09:47:47
En fait, le [] appelle les destructeurs de chacun des éléments du tableau, puis delete libère la mémoire.
Dans le cas d'un type int, short, ..., il n'y a pas vraiment de destructeur, donc pas besoin du [], mais je n'ai pas dit qu'on ne pouvait pas le mettre
Marsh Posté le 29-01-2003 à 09:49:47
Angel_Eyes a écrit : En fait, le [] appelle les destructeurs de chacun des éléments du tableau, puis delete libère la mémoire. |
le [] doit être mis. Sinon il va pas détruire chaque case du tableau mais juste libérer le pointeur. En + si tu le mets pas ca va fonctionner parfois et planter 90% du temps
Marsh Posté le 29-01-2003 à 14:32:56
gloop : si il y avait une classe, ok, mais là, je parle du type int, explique moi ce qui doit être détruit et pourquoi ça planterait ... ????
Marsh Posté le 29-01-2003 à 14:36:09
j'admet quand même que c'est assez particulier, mais le destructeur d'un type int, short, ... ne doit rien faire, le delete se résume en une libération du pointeur...
Marsh Posté le 29-01-2003 à 19:04:55
Angel_Eyes a écrit : gloop : si il y avait une classe, ok, mais là, je parle du type int, explique moi ce qui doit être détruit et pourquoi ça planterait ... ???? |
le compilo doit qd meme libérer toute la mémoire prise par le tableau et pour ca il faut le []. delete supprime un objet _individuel_ et delete [] un tableau.
Marsh Posté le 29-01-2003 à 20:21:01
gloop : en fait, je crois qu'on a tous les deux raison
En cherchant sur le net, j'ai trouvé ceci sur delete
1. nettoie tout sans jamais avoir besoin de []
2. appele le destructeur du premier objet et libère le tableau, nécessite [] pour appeler les destructeurs de tous les objets du tableau
3. utilisation de [] obligatoire pour un tableau
je crois pas qu'on va se battre pour du compiler specific et ton écriture est valide dans tous les cas.
Je vais rechercher mes sources (ai viré mes notes ) pour retrouver qqch de plus précis sur la question.
Mais j'ai peur qu'il y ait eu une évolution à ce niveau depuis mes cours en 98
Marsh Posté le 29-01-2003 à 20:41:27
effectivement, jusque il y a peu, j'avais raison
http://www.usenix.org/publications [...] 2/c++.html
delete connaissait la mémoire allouée au pointeur et le [] ne servait qu'à appeler les destructeurs supplémentaires.
mais il y a eu une révision qui divise new et new[] et qui oblige l'utilisation respective de delete et delete[]
Damned, je me fais vieux
Marsh Posté le 27-01-2003 à 21:02:06
salut
j'aimerai savoir ce que vous pensez d'un prog que j'ai fais oùje dois incrémenter un tableau puis trouver la + petite valeur.
le code fonctionne cependant j'aimerai avoir vos conseils pr l'améliorer ca permettra de mieux comprendre la notion de pointeur
merci
---------------
http://www.independza.com