IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

Tentative de R/W de m�moire prot�g�e


Sujet :

C++/CLI

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    79
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 79
    Par d�faut Tentative de R/W de m�moire prot�g�e
    [Visual C++ 2005 Express / Windows form / .Net]

    Bonjour � tous,
    Je suis en train d'�crire une petite classe simple qui me permet de g�rer des matrices.
    J'ai donc comme membres les dimensions de ma matrice, et un tableau � deux dimensions de double contenant les valeurs de la matrice.
    J'utilise les constructeurs par defaut/valeurs/recopie, qui fonctionnent bien ..... jusqu'� un certain temps...

    Je m'explique, lorsque je cr�� plusieurs objet matrices, au bout d'un moment (� la cr�ation de la 9 ou 10�me matrice environ), j'obtiens le message d'erreur :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    Une exception non gérée du type 'System.AccessViolationException' s'est produite dans test_classes.exe
     
    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.
    et le programme s'arr�te dans un des 3 constructeurs (n'importe lequel).
    Voici le code du constructeur par valeurs :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    matrice::matrice(int X, int Y, double valeur)
    {
    	//Créé une matrice par valeurs
    	int i,j;
     
    	this->dimX = X;
    	this->dimY = Y;
    	if (Y == 1) this->IsVector = true ;
     
    	this->valeurs = new double* [this->dimX] ;
    	for (i = 0 ; i < this->dimX ; i++)
    	{
    		valeurs[i] = new double[this->dimY] ;
    	}
     
    	for (i = 0 ; i < this->dimX ; i++)
    	{
    		for (j = 0 ; j < this->dimY ; j++)
    		{
    			this->valeurs[i][j] = valeur;
    		}
    	}
     
    }
    et voici comment je cr�� mes objets :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    matrice^ M1 = gcnew matrice(3,2,2);
    matrice^ M2;
    matrice^ M3 = gcnew matrice(3,3,3.2);
    matrice^ M4;
    matrice^ M5;
    matrice^ V1;
    matrice^ V2;
    matrice^ V3;
    matrice^ V4 = gcnew matrice(5,1,0);
    J'utilise �galement des fonctions qui renvoient une matrice. exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    //Transposée d'une matrice.
    matrice^ matrice::transp(void)
    {
    	int i,j;
    	matrice^ m_res = gcnew matrice(this->dimY,this->dimX,0);
     
    	for(i=0;i<this->dimX;i++)
    	{
    		for(j=0;j<this->dimY;j++)
    		{
    			m_res->valeurs[j][i] = this->valeurs[i][j];
    		}
    	}
    return(m_res);
    }
    dans ce cas, dans mon programme, je cr�� une matrice tel que j'ai cr�� M4 et je fais :

    voil�, je ne sais pas quoi rajouter pour expliquer la situation. Donc en g�n�ral, tout fonctionne bien un moment, puis j'obtiens le message d'erreur au niveau de la ligne du constructeur suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    this->valeurs = new double* [this->dimX] ;
    Avez-vous une id�e de la source du pb ???

    Merci !

    PS : Ah oui, pour ceux qui auraient remarqu� ou qui se posent la question, c'est volontaire que mes membres soient public...

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    alors, se plonger dans ton code comme ca risque d'etre un peu laborieux.

    Mais j'ai une question qui me taraute ...

    Pourquoi te passer de la puissance du C++/CLI et de sa capacit� � g�rer la correctement m�moire � travers des tableaux manag�s ou des conteneurs de .Net ?

    Ainsi, avec un cli::array, tu n'aurais pas de probl�mes de lib�ration ou d'acc�s � la m�moire.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    79
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 79
    Par d�faut
    parce que je connais pas !
    je connais le C++ "tout b�te", c�d que je sais faire des programmes console, etc., et l� pour mon stage je me retrouve avec visual C++, windows form et compagnie, et y a des millions de choses � savoir ! Alors je fais ce que je peux
    Je sais qu'il existe l'iade msdn, mais c'est vraiment �norme, en plus, � priori plusieurs langages sont utilisables sous visual c++, ce qui fait que j'arrive rarement � obtenir l'information que je cherche.

  4. #4
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    tu peux commencer par mes tutos (en signature) ou par la faq c++/cli, notamment http://dotnet.developpez.com/faq/cpp...ntaxe#cliarray

    pour d�clarer un tableau � deux dimensions, si tu as un soucis, je pourrais t'aider

Discussions similaires

  1. R�ponses: 4
    Dernier message: 27/05/2016, 12h48
  2. R�ponses: 3
    Dernier message: 03/11/2012, 12h18
  3. R�ponses: 2
    Dernier message: 09/07/2010, 13h31
  4. R�ponses: 5
    Dernier message: 25/01/2010, 11h35
  5. R�ponses: 3
    Dernier message: 30/06/2009, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo