xbabilone
Messages postés47Date d'inscriptionvendredi 18 février 2005StatutMembreDernière intervention 7 janvier 2018
-
Modifié le 6 janv. 2018 à 12:07
xbabilone
Messages postés47Date d'inscriptionvendredi 18 février 2005StatutMembreDernière intervention 7 janvier 2018
-
7 janv. 2018 à 11:20
Bonjour, et bonne année !
Je suis sous ubuntu et je compile avec"gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)" .
Voici mes option de compilation : g++ -Wall *.cc -o exec
Voici mon code
int main(void) { const int n = 10000000; int array [n];
for (int i =0 ; i<n ; i ++)array[i]=0; for (int i =0 ; i<n ; i ++)array[i]++;
return 0; }
A l'éxecution j'ai une erreur de segmentation .Si je passe 1000000 a n il n'y a plus d'erreur .Alors où est le probleme ?
On dirai que passer une certaine taille cela plante .
--
A voir également:
Y a t'il une taille maximun a un tableau statique en c++
Whismeril
Messages postés18991Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention27 mars 2024654 6 janv. 2018 à 15:13
Bonjour
C++ c'est pas trop mon truc donc je ne sais pas te dire s'il y a une taille maxi pour un tableau.
Par contre c'est sûr il y a une valeur maxi pour les int. Comme elle dépend de ton OS, je ne suis pas certain que le problème vienne de là.
Si on se réfère à cette page
http://www.cplusplus.com/reference/climits/ tu es largement au dessus de 32767
Du coup, tu peux peut être tester
int main(void)
{
const int n = 10000000;
//int array [n];
//for (int i =0 ; i<n ; i ++)array[i]=0;
//for (int i =0 ; i<n ; i ++)array[i]++;
return 0;
}
Si ceci plante, alors c'est que la valeur dépasse la capacité d'un int sur ton ordi
xbabilone
Messages postés47Date d'inscriptionvendredi 18 février 2005StatutMembreDernière intervention 7 janvier 20182 Modifié le 6 janv. 2018 à 18:32
Merci de ton attention !
Une erreur de segmentation c'est quand on essaye d'accéder a une adresse mémoire qui n'appartient pas au programme mais là ce n'est pas le cas .Si j'essaye de créer le même tableau en dynamique ça fonctionne nickel.Alors où est le problème ?
Je sais que la place necessaire pour un tableau statique est gerer par le compilateur et pas a l'execution .Je pense donc qu 'il doit y avoir une taille au dessus de laquelle le compilateur merdoye .
Vous n’avez pas trouvé la réponse que vous recherchez ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 6 janv. 2018 à 20:56
Bonjour.
Il faut bien différencier stack et heap. La stack est un endroit on affecte des variables rapidement sur un contexte (variables locales, arguments, tableaux statiques, etc..) tandis que dans le heap on y met un peu tout.
La stack est limitée par la "stack size", le heap par la ram sur ton ordinateur.
Donc créer trop de variables locales, ou créer un tableau statique local trop gros (supérieur à la stack trace), fera planter ton programme. La stack size dépend de ton environnement (environ 1Mo sous Windows, et la valeur de ulimit -s sous Linux). Tu peux la changer, mais généralement quand tu dépasses la stack size par défaut, c'est que tu fais mal quelque chose :).
Pas de souci quand tu alloues, vu que ça passe sur le heap.