Stack overflow / erreur sgmentation / C++ [Résolu]

Signaler
-
 azurtech -
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;
}

2 réponses

Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
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/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Merci beaucoup pour ton aide et pour tout ces conseils
effectivement ça marche bien avec vector
Merci