begin process at 2012 05 30 22:48:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

violation d'acces c++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

violation d'acces c++

samedi 5 février 2011 à 17:36:00 | violation d'acces c++

jimdano

bonjour,

je suis étudiant de 2eme année de DUT informatique, et viens de commencer c++.
dans ma classe CArmada, j'ai voulu imposer le fait que l'emplacement du sous marin soit unique, et le compilateur me met :

Exception de première chance à 0x5914082a dans armada.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xabababab.

tout marchait bien avant que je n'essaye de mdifier cela(entre balises [b])...

De plus, j'ai testé plusieurs variables pour k (entre balises [u]), mais sans résultats...

voici mes codes ( en gras se situe la ou l'erreur se met...).

Merci d'avance!! =)

CARMADA . CPP

Code C/C++ :
#include "CArmada.h"

CArmada :: CArmada(int unNbre) {

	m_pTabSousMarins = new string[unNbre];
	m_nbTotSSM = unNbre ;
}

/*************************************/

[b] void CArmada :: RemplirStruct() {
	char tab[3];
	int i = 0;

	while (i<m_nbTotSSM) {
		cin.getline(tab, 3, '\n');
		string ch(tab);
		if (Analyser(ch)){		
			m_pTabSousMarins[i]=ch;
			if ( i>=1){
				for (int k=0; k<=[u]i[/u];k++){
					if (m_pTabSousMarins[k]==m_pTabSousMarins[i]){
						cout << "cette valeur a déja été entrée, recommencer" << endl;
					}
					else{
						i++;
					}	
				}	
			}
			else {
				i++;
			}
		}		
	}
 }[/b]

/************************************/

int CArmada :: getNbreSSM(){
	
	return m_nbTotSSM;
}

/***********************************/

string* CArmada :: getPointSSM(){

	return m_pTabSousMarins;
}

/**********************************/

 bool CArmada :: Analyser (string laSaisie){
	
	bool ret = false;
	char caract;
	char nbre;
	
	caract = laSaisie.at(0);
	nbre = laSaisie.at(1);
	
	if (caract>='a' && caract<='j') {
   		cout<<"Vous avez tapé une minuscule."<<endl;
		caract = caract + ('A'-'a');
    		cout<<"La majuscule correspondante est "<< caract <<endl;
		ret = true;
 	}
	else if (caract>='A' && caract<='J') {
		ret = true;
	}
	else {
		cout<<"Vous avez tapé un mauvais truc" << endl;
		ret = false;
	}
	if (nbre>='0' && nbre<='9') {
	}
	else {
		ret = false;
	}
	if (ret == true){
		cout << "vous avez un sous marin à la ligne "<< caract << " colonne " << nbre << endl;
	}
	else {
		cout << "position non valide" << endl;
	}
	return ret;
}
/***********************************/

CArmada :: ~CArmada () {

	if ( m_pTabSousMarins!=NULL){

		delete[] m_pTabSousMarins;
		cout << "Destructeur objet m_pTabSousMarins " << m_pTabSousMarins << endl;

	}
}

CARMADA . H !!!!!!!!!!!!!!!!
#ifndef CARMADA_H_
#define CARMADA_H_
#include "Bibli.h"

class CArmada {

	private: 
		string* m_pTabSousMarins;
		int m_nbTotSSM;
	public:
		CArmada(int unNbre);
		~CArmada();
		void RemplirStruct();
		int getNbreSSM();
		string* getPointSSM();
	private:
		bool Analyser (string laSaisie);

};

#endif /*CARMADA_H_*/

LANCEUR !!!!!!!!!!!

#include "CArmada.h"

int main () {
	
	CArmada C1(3);
	C1.RemplirStruct();

}

samedi 5 février 2011 à 19:20:35 | Re : violation d'acces c++

pop70

Ceci doit être du à une lecture dans un emplacement de tableau qui n'est pas alloué, si tu remplaces
Code C/C++ :
 for (int k=0; k<=i;k++){


par

Code C/C++ :
for (int k=0; k< i;k++){


cela marche-t-il ?

généralement ce genre d'erreur n'affecte pas la compilation, et c'est au moment de l'exécution qu'un joli message accompagné d'un doux BIIIP! fait son apparition...

Bref pour un petit i essaie de compter les nombres dans la boucle, et vérifie que tous les éléments des tableaux existent, genre m_pTabSousMarins[12] alors que m_pTabSousMarins ne va que jusqu'à m_pTabSousMarins[11]. Il ne faut pas oublier qu'un tableau commence à 0, je pense que c'est à cause de ça que ça bug, le inférieur ou égal doit peut-être être remplacé par inférieur tout court.


Pop70
samedi 5 février 2011 à 20:21:17 | Re : violation d'acces c++

jimdano

merci pop, j'y ai cru au début mais ca n'a finalement rien changé...

c'est le compilateur pendant l'exécution qui me met ce message, tu as raison...

Merci quand même =)
dimanche 6 février 2011 à 15:08:58 | Re : violation d'acces c++

Chouchou182

Réponse acceptée !
Salut,

Il y a un souci avec tes i++. Je n'ai pas bien compris l'imbrication de tes if / for / else ...

En écrivant ce qui suit, ça semble fonctionner mieux.
Code C/C++ :
void CArmada :: RemplirStruct() {
  char tab[3];
  int i = 0;

  while (i<m_nbTotSSM) {
    bool ok = false;

    cin.getline(tab, 3, '\n');
    string ch(tab);
    if (Analyser(ch)){
      ok = true;
      m_pTabSousMarins[i]=ch;
      for (int k=0; k<i && ok; k++){
        if (m_pTabSousMarins[k]==m_pTabSousMarins[i]){
          cout << "cette valeur a déja été entrée, recommencer" << endl;
          ok = false;
        } 
      } 
    }
    if (ok)
      ++i;
  }   
}


Bonne prog,
--
Chouchou.
dimanche 6 février 2011 à 16:24:37 | Re : violation d'acces c++

jimdano

en effet, ca marche, Merci bcp chouchou =)


Cette discussion est classée dans : int, string, carmada, ptabsousmarins, unnbre


Répondre à ce message

Sujets en rapport avec ce message

Pb Chaîne de caractères [ par mmuller57 ] Bonjour,J'ai créé un petit programme qui convertit les caractères d'une chaîne de caractères par leurs codes ASCII :#include #include #include int con ASM en c++ - Bug d'interruption [ par madprog ] int a;char*string;void affiche(char*string){ for(a=0; string[a]; a++) { asm("movl $string, %eax"); asm("movl a, %ebx"); asm convertir un int en char ou en string [ par mimyne ] Bonjour je voudrai savoir comment on peut faire en c++ pour convertir un int en char ou bien en string la fonction itoa ne marche pas merci STRING -> INT [ par guiguimac ] bonsoir,je cherche à passer d'une chaîne de type string à un int de manière la plus effecace possible.string strval("123");int intval;... ensuite si v help :: String => Int [ par Skyman ] Comment on fait pour changer un string en int ou en long ?ex :char *chaine;int entier;long entierlong;chaine = "1234";int = chaine; // (int = 1234) Conversion des types string en int [ par tanguy_laverdure ] Bonjour, j'essai en vain de convertir un type string en int. Y a t il des méthodes directes de string.h qui permettent de faire cela ou faut il me fai dim as [ par niketou ] Bonjour a tous,j'ai ceci en vb :Private Type untype i as long j as int k as intl as string.....End Type.....Public Function Get(Name As Stri pb de conversion int -> string [ par RoAdBooK ] Bonjour à tous,Problématique : je souhaite décomposer une date pour obtenir une string de la forme LAAAAMM1.txt (AAAA=année et MM = mois) qui me servi Concaténer une string et un int [ par MaximeH ] Bonjour,J'ai 2 variables, définies comme suit : int a;LPTSTR b;Je souhaite concaténer b et a, pour ensuite les envoyer dans une statusbar via la fonct Convertir une string en int [ par tapeng ] Bonjour :) je suis absolument débutante en programmation quelle qu'elle soit, mais j'ai décidé récemment de me mettre au c++... mon copain, qui déve


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales