voici ue petit programme qui a pour but d’initialiser une matrice d'entiers mat [1000][1000]; écrit en C++
il n'y a aucune erreur lors de la compilation par contre lors de l’exécution le message "Le programme a cessé de fonctionner "
apparait. avec l'utilisation du debug j'ai trouvais qu'il s'agissait d'une erreur de segmentation ou encore de stack overflow .
et ceci sous différentes IDE et machines.
j'ai cherchais sur le net ce problème mais je n'ai pas trouvais de solutions.
comment faire pour pouvoir utiliser de telles matrices sachant que j'ai besoin de matrices 1600*1400 ?
Merci d'avance.
#include <stdlib.h>
#include
using namespace std;
int main(int argc, char *argv[])
{
int mat[1000][1000];
int i,j;
for (i=0;i<1000;i++)
for(j=0;j<1000;j++)
{
mat[i][j]=0;
}
return 1;
}
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 14 avril 2013 à 20:25
Bonjour.
C'est tout simplement que tu ne peux pas avoir des tableaux statiques aussi gros. Il te faut soit:
- Utiliser des tableaux dynamiques (à l'aide de "new")
- Utiliser les std::vector (via taille statique avec .resize() ou alors dynamique avec .push_back())
Par exemple (sans avoir tester), ceci devrait être pas trop mal:
#include
#include <vector>
int main()
{
std::vector<std::vector > mat;
mat.resize(1000);
for (int i = 0; i < 1000; ++i)
{
mat[i].resize(1000);
for (int j = 0; j < 1000; ++j)
mat[i][j] = 0;
}
return 0;
}
Quelques conseils:
- Si tu fais du C++, il n'y aucune raison que tu ai stdlib.h dans tes headers.
- Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace - Déclare tes variables au moment de leurs utilisations. Ne prédéclare rien en haut d'une fonction.
- Un programme qui s'éxecutent bien renvoit 0.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question