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

- - Dernière réponse :  azurtech - 14 avril 2013 à 21:31
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;
}
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
10 juin 2019
85
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 135 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cptpingu
0
Merci
Merci beaucoup pour ton aide et pour tout ces conseils
effectivement ça marche bien avec vector
Merci
Commenter la réponse de azurtech