begin process at 2012 05 28 07:24:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Allocation statique ou dynamique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Allocation statique ou dynamique

lundi 17 avril 2006 à 11:45:56 | Allocation statique ou dynamique

luhtor

Bon alors, j'ai un exemple de programme. Mais je me pose la question de sa validité sachant que ce que vous allez voir. C'est correct dans certain langage comme Ada.

int main()
{
  int n = 10;
 
  {
    int tab[n]; // <= Grande question
    int valeur_suivante = 0;
   
    for (int i=0 ; i<n ; i++)
    {
      tab[i] = i;
      std::cout << i << " : " << tab[i] << std::endl;
    }
   
    std::cout << "Adresse de tab : " << (long)tab << std::endl;
    std::cout << "Adresse de valeur suivante : " << (long)&valeur_suivante << std::endl;
    std::cout << "Valeur de valeur suivante : " << valeur_suivante << std::endl;
  }
  system("PAUSE");
  return 0;
}

Lorsque la fonction est appelée "n" contient une valeur fixe. C'est aussi à ce moment la, que le tableau "tab" est créé. La différence en Ada, c'est qu'il y a un champ spécial de déclaration de variables (type pascal) donc il n'y a pas d'ambiguité sur la taille du tableau, meme si la taille est un paramètre de la fonction. Si bien que le code dessus serait bon.

Alors quelqu'un pourrait il me dire si le programme au dessus est définitivement incorrect, ou alors il y a des cas où c'est correct.
Dans le cas ou c'est incorrect, pourquoi est ce que le compilo ne donne pas de message d'erreur ? Et si la preuve pouvait etre autre chose qu'une opinion personnelle, ca serait bien :)

merci.
lundi 17 avril 2006 à 11:47:09 | Re : Allocation statique ou dynamique

luhtor

J'ai fais une petite erreur dans le post, il n'y a pas de fonction appelée, mais simplement un nouveau bloc {}.
lundi 17 avril 2006 à 12:00:03 | Re : Allocation statique ou dynamique

vecchio56

Administrateur CodeS-SourceS
Déja j'ai pas bien compris quand tu dis n a une valeur fixe... n a toujours une valeur et le compilo est donc capable de l'utiliser pour réserver de l'espace dans la pile (il suffit en gros de faire un sub esp, n*4) Du coup j'ai pas bien compris ton problème: comment le compilateur pourrait il dire des fois c'est correct et des fois c'est pas correct? Je signale aussi que c'est gcc qui autorise int tab[n], c'est impossible sous VC++ (sauf si n est const int) Et aussi, pourquoi tu as ouvert un nouveau bloc après int n=10?
lundi 17 avril 2006 à 12:17:06 | Re : Allocation statique ou dynamique

luhtor

Pour l'histoire du bloc, c'est inutile ici, mais ca peut etre rentré par l'utilisateur. En C, ca serait nécessaire, mais c'est vrai qu'en C++, c'est inutile.
Pk je pose la question ? car il y a eu des postes sur le meme sujet, ou il était dit qu'il était formellement interdit de faire ce genre de déclaration "int tab[variable]";

Enfin s'il s'avère que "int tab[variable]" est légal, donc tous les exemples sur ce forum ou on utilie malloc ou new pour allouer une chaine de caractère local à un bloc {} pourrait etre remplacé par une simple déclaration de tableau statique.
Donc finalement, on utilise l'allocation dynamique la ou parfois, c'est pas nécessaire (dans le cas des variables locales).


lundi 17 avril 2006 à 12:21:30 | Re : Allocation statique ou dynamique

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
Comme je te l'ai dit, VC++ interdit de faire ce genre d'allocation, ca explique peut être. Je me souviens que c'était l'objet de mon premier message sur ce forum, et Kaid m'avais dit que c'était normalement interdit de faire de genre d'allocations. Mais c'est peut-être aussi un peu risqué: j'imagine qu'il y a moins d'espace dispo dans la pile que dans le tas, du coup tu risques de te retrouver avec un stack overflow si jamais n est trop grand
lundi 17 avril 2006 à 23:00:54 | Re : Allocation statique ou dynamique

ymca2003

Voici ce j'ai compris sur le sujet :

int tab[n];
avec n autre chose qu'une constante connue à la compilation est autorisé en C depuis la norme ansi c99.
Par contre elle est toujours interdite en C++ qui nécessite que la taille du tableau soit connue à la compilation.






Cette discussion est classée dans : int, tab, cout, allocation, std


Répondre à ce message

Sujets en rapport avec ce message

Allocation dynamique dans une fonction [ par Veovis ] Salut,Toujours dans mon projet de TP, j'ai un petit soucis avec l'allocation dynamique dans une fonction. Ce que je voudrais faire c'est quand le tabl problème classe polynome [ par cricri nature ] Bonjour, j'ai réussi à finir ma classe monome et doit maintenant créer une classe polynome. Seulement il y a 2 erreurs que je ne comprend pas. Pouvez- Aide [ par Hellboy67 ] Voila j'ai un exo pour les cours de prog a faire dont le code source est le suivant:# include # include using std::cout;using std::cin;using std::end deplacement avec fleche directionnelle [ par dami13014 ] bonjours tout le monde voila je débute en programmation et j'ai fait un petit sudoku il et pa trés complex mais j'aimerai bien pouvoir me déplacer ave problème de "cout" [ par infinity7780 ] Bonjour,J'ai acheté et j'ai lu plusieurs chose sur le C++.Mais comme je débute, je doit surement me trompé.Alors voici ma question. est-ce normal que convertir du cpp en VB.net ou VB [ par Taur33 ] bonsoir à tous, j'aurais besoin de convertir le code suivant en vb je précise que j'ai déjà essayé des logiciels qui soit disant le faisait mais cela retour à la ligne [ par DarkC0 ] #include #include #include #include #include #include void retourLigne(int x, int y); void cadre_T(); void Color(int couleurDuTexte,int couleur Probleme allocation C++ [ par elite182 ] Bonjour a tous , je dois réaliser une fonction qui range des grands nombres dans un tableau d'entier, ( ex : 2 333 546 donnera : Tab[0] = 546; tab verification entrée cin [ par fhoest ] Bonjour, je voudrai faire une vérification sur une entrée std::cin mon problème est que si je met par exemple ll et ensuite je valide par la touche "r exercice C++ [ par maina87 ] Bonjour, je suis débutante e C++ et j'ai eu a faire a un exercice, svp corrigez le moi: Voilà l'exercice: Donnez le résultat du code suivant: int


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales