Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1044 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++]pointeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++]pointeurs

n°295057
bol972
Posté le 27-01-2003 à 21:02:06  profilanswer
 

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

Code :
  1. #include <stdio.h>
  2. #include <iostream.h>
  3. #include <string>
  4. int saisie(int* tab, int n);
  5. int mini(int* tab,int n);
  6. int main(void)
  7. {
  8. int n;
  9. int* t;
  10. t=new int[n];
  11. cout<<"entrez le nombre d'élément dans le tableau.\n";
  12. cin>>n;
  13. saisie(t,n);
  14. cout<<"la plus petite valeur est\n"<<mini(t,n)<<"\n";
  15. delete t;
  16. system("pause" );
  17. return 0;
  18. }
  19. // sasie du tableau
  20. int saisie(int* tab, int n)
  21. {
  22. for(int i=0;i<n;i++){
  23. cout<<"entre le nombre numéro:"<<i<<"\n";
  24. cin>>tab[i];}
  25. }
  26. // mini
  27. int mini(int* tab,int n)
  28. {
  29. int v=50;
  30. for(int i=0;i<n;i++){
  31.    if(tab[i]<v)
  32.    {v=tab[i];}
  33. }
  34. return v;
  35. }


---------------
http://www.independza.com
mood
Publicité
Posté le 27-01-2003 à 21:02:06  profilanswer
 

n°295062
Willyzekid
Posté le 27-01-2003 à 21:27:37  profilanswer
 

Là, de temps en temps, tu vas te taper une jolie runtime error.


---------------
Horizon pas Net, reste à la buvette!!
n°295063
Willyzekid
Posté le 27-01-2003 à 21:28:43  profilanswer
 

Et puis ton delete qui correspond pas au new...enfin bref, la cata...Sinon c'est coherent pour un mix C/C++


---------------
Horizon pas Net, reste à la buvette!!
n°295069
Angel_Eyes
Wait & see...
Posté le 27-01-2003 à 21:36:41  profilanswer
 

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


---------------
Angel Eyes, j'en raffole tous les matins... :pt1cable:  
n°295107
kjus
Posté le 27-01-2003 à 22:26:35  profilanswer
 

puis c'est delete [] t;

n°295214
Musaran
Cerveaulté
Posté le 28-01-2003 à 06:45:18  profilanswer
 

Code :
  1. #include <iostream.h>

J'abandonne...
 

Code :
  1. int v=50;

D'où il sort ce 50 ?

Code :
  1. int mini(int* tab,int n)
  2. {
  3. int min= tab[0];
  4. for(int i=1 ; i<n ; ++i)
  5.  if(tab[i]<min)
  6.   min=tab[i];
  7. return v;
  8. }


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.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°295247
Angel_Eyes
Wait & see...
Posté le 28-01-2003 à 09:20:46  profilanswer
 

kjus : suis pas sur que le [] soit obligatoire dans le cas présent


---------------
Angel Eyes, j'en raffole tous les matins... :pt1cable:  
n°295616
kjus
Posté le 28-01-2003 à 18:27:19  profilanswer
 

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[];

n°295621
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-01-2003 à 18:32:26  profilanswer
 

faut surtout pas que Taz voie ce topic, sinon il va falloir le ranimer [:ddr555]


---------------
J'ai un string dans l'array (Paris Hilton)
n°295643
Angel_Eyes
Wait & see...
Posté le 28-01-2003 à 19:09:02  profilanswer
 

suis pas sur, mais je crois que [] sert à appeler les destructeurs des membres qui sont des classes... inutile dans le cas d'un int


---------------
Angel Eyes, j'en raffole tous les matins... :pt1cable:  
mood
Publicité
Posté le 28-01-2003 à 19:09:02  profilanswer
 

n°295781
kjus
Posté le 28-01-2003 à 21:57:36  profilanswer
 

mais ce n'est pas un int, mais un tableau !

n°295918
Musaran
Cerveaulté
Posté le 29-01-2003 à 00:42:23  profilanswer
 

Si il voit ça c'est le coma direct !
 

Code :
  1. malloc <-> free
  2. new    <-> delete
  3. new[]  <-> delte[]

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.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°295982
LetoII
Le dormeur doit se réveiller
Posté le 29-01-2003 à 08:04:19  profilanswer
 

Musaran a écrit :

Si il voit ça c'est le coma direct !
 

Code :
  1. malloc <-> free
  2. new    <-> delete
  3. new[]  <-> delte[]

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.


 
 [:plusun]


---------------
Le Tyran
n°295988
Cherrytree
cn=?
Posté le 29-01-2003 à 08:20:53  profilanswer
 

Harkonnen a écrit :

faut surtout pas que Taz voie ce topic, sinon il va falloir le ranimer [:ddr555]


 [:xp1700]  :lol:


---------------
Le site de ma maman
n°296061
Angel_Eyes
Wait & see...
Posté le 29-01-2003 à 09:42:32  profilanswer
 

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
...


---------------
Angel Eyes, j'en raffole tous les matins... :pt1cable:  
n°296069
Angel_Eyes
Wait & see...
Posté le 29-01-2003 à 09:47:47  profilanswer
 

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 :)


---------------
Angel Eyes, j'en raffole tous les matins... :pt1cable:  
n°296073
gloop
Posté le 29-01-2003 à 09:49:47  profilanswer
 

Angel_Eyes a écrit :

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 :)


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

n°296286
Angel_Eyes
Wait & see...
Posté le 29-01-2003 à 14:32:56  profilanswer
 

gloop : si il y avait une classe, ok, mais là, je parle du type int, explique moi ce qui doit être détruit :sweat: et pourquoi ça planterait ... ????


---------------
Angel Eyes, j'en raffole tous les matins... :pt1cable:  
n°296289
Angel_Eyes
Wait & see...
Posté le 29-01-2003 à 14:36:09  profilanswer
 

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...


---------------
Angel Eyes, j'en raffole tous les matins... :pt1cable:  
n°296547
gloop
Posté le 29-01-2003 à 19:04:55  profilanswer
 

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 :sweat: 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.

n°296602
Angel_Eyes
Wait & see...
Posté le 29-01-2003 à 20:21:01  profilanswer
 

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 :pfff:


Message édité par Angel_Eyes le 29-01-2003 à 20:30:13

---------------
Angel Eyes, j'en raffole tous les matins... :pt1cable:  
n°296614
Angel_Eyes
Wait & see...
Posté le 29-01-2003 à 20:41:27  profilanswer
 

effectivement, jusque il y a peu, j'avais raison :D
 
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  :pfff:


---------------
Angel Eyes, j'en raffole tous les matins... :pt1cable:  
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++]pointeurs

 

Sujets relatifs
[C]Un ptit coup de main sur pointeurs et fonction svpJ'ai bcp de mal avec les pointeurs, un peu d'aide svp ...
[C++] pointeurs "intelligents" (désolé, c'est leur nom)Pbs avec pointeurs ! [RESOLU ]
double pointeurs et tableaux?Pointeurs sur fonctions (question pointue !)
petite question sur les pointeursdemande de validation d'une fonction en c avec des pointeurs
[C] Petite question sur les pointeurs deux étoiles qui se suivent[C++] Question sur les pointeurs, aidez moi à comprendre svp !
Plus de sujets relatifs à : [c++]pointeurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR