calcul de grande masortingce

J’écris un code simple en C ++ et je le comstack avec g ++ sur linux ubuntu 11.04 et je ne reçois aucune erreur, mais lorsque j’exécute le fichier exécutable, le message d’erreur “erreur de segmentation” apparaît.

Je sais que mon code n’a pas de problème et que cette erreur est liée au compilateur.

Quelqu’un peut m’aider?

Mon code est:

#include  int main() { double a[200][200][200],b[200][200][200],c[200][200][200]; int i,j,k; double const pi=3.14; for(k=0;k<200;k++) { for(j=0;j<200;j++) { for(i=0;i<200;i++) { a[i][j][k]=sin(1.5*pi*i)*cos(3.5*pi*j)*k; b[i][j][k]=cos(1.5*pi*i)*cos(2.5*pi*k)*j; c[i][j][k]=a[i][j][k]-b[i][j][k]; } } } } 

Cette fonction peut vous aider:

 double ***alloc3d(int l, int m, int n) { double *data = new double [l*m*n]; double ***array = new double **[l]; for (int i=0; i 

Les trois baies nécessitent environ 190 Mo d’espace disque, ce qui dépasse certainement la limite de taille de stack imposée par votre système d’exploitation.

Essayez de les allouer sur le tas (en utilisant new ) au lieu de les placer sur la stack.

Vous mettez d’énormes masortingces de doubles sur la stack (vraisemblablement, en supposant que votre architecture gère les variables locales). Presque sûrement, la stack de votre système ne peut pas contenir autant d’espace.

A la place, utilisez des vecteurs pour allouer sur le tas:

 std::vector > > a(200, std::vector >(200, std::vector(200))); 

débordement de stack -> erreur de segmentation

pour un cas non symésortingque, nous devons utiliser ceci:

  double*** a=new double**[IE]; for(int i=0;i 

avec le code ci-dessus, nous pouvons construire d’énormes masortingces comme le permet le RAM de notre ordinateur.