Exception en C++

Fermé
149_67 Messages postés 18 Date d'inscription dimanche 1 décembre 2013 Statut Membre Dernière intervention 26 septembre 2014 - Modifié par pijaku le 17/01/2014 à 13:12
 Utilisateur anonyme - 20 janv. 2014 à 07:50
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

Utilisateur anonyme
17 janv. 2014 à 11:23
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
149_67 Messages postés 18 Date d'inscription dimanche 1 décembre 2013 Statut Membre Dernière intervention 26 septembre 2014
17 janv. 2014 à 17:13
Merci pour la réponse,
Mais le problème persiste encore :( même avec ta solution.
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
17 janv. 2014 à 20:02
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
Utilisateur anonyme
20 janv. 2014 à 07:50
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