Stack overflow / erreur sgmentation / C++

Résolu
azurtech - 14 avril 2013 à 20:11
 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;
}

2 réponses

cptpingu Messages postés 3839 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 29 juin 2024 124
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/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
Rejoignez-nous