Exception en C++

Bonjour,
L'exécution de ce programme m'affiche cette exception:

"Une exception non gérée du type 'System.AccessViolationException',
Informations supplémentaires : Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée"

Je veux savoir la cause de cette exeption,

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <iostream>
   using namespace std;
                                                                
int main()
 {
             
 float  **grille;
 int taille_gr=10;
    
    grille=new float*[taille_gr];
  
     
    for (int i=0; i <taille_gr; i++)
      {
        for (int j=0; j <taille_gr; j++)
        {
            grille[i][j]=((float) rand()) / (float) RAND_MAX;  
            float x=grille[i][j];
            printf("%f \n",x);
         }
}
   
 system("PAUSE");
 return EXIT_SUCCESS;   
}


Merci

1 réponse

  1. salut

    ton allocation du tableau n'est pas bonne

    ilf faut plutot


    float* new_arr = new float[taille_gr][taille_gr];

    tu n'avais alloué qu'une partie, donc forcément quand tu écrivais dans une partie non alloué, si l'emplacement mémoire où tu essaye d'écrire est locké, ca pète.

    Dis moi si ca suffit, sinon je le referai avec le compilateur.

    naga
    0
    1. Merci pour la réponse,
      Mais le problème persiste encore :( même avec ta solution.
      0
    2. Contributeur
      naga,
      new
      peut pas allouer des tableaux à plus d'une dimension; il faut d'abord initialiser le tableau de
      float*
      (les colonnes), puis chaque ligne, une à une:
      grille = new float*[taille_gr];
      for(int i = 0; i < taille_gr; ++i)
          grille[i] = new float[taille_gr];
      0
    3. autant pour moi, j'étais partis dans ce sens au départ (d'ailleurs il me manque une *, c'est
      float ** grille = ... 
      ) mais j'ai eu un doute si c'était obligatoire en ++ (l'habitude du # -_-') x]
      0