Exception levée , violation d'acces en lecture
zz770
Messages postés
1
Statut
Membre
-
Dalfab Messages postés 720 Statut Membre -
Dalfab Messages postés 720 Statut Membre -
bonjour, j'ai un programme a faire et je l'ai deja commencer mais arriver un moment ce message d'erreur apparait et je ne sais pas pourquoi. Le programme consiste a creer une base de donnée contenant des bus avec pour infomatation le numero de ligne , nombre de station et durée du trajet.
le programme se decoupe en plusieurs fonction et je suis en train de creer la fonction qui consiste a rajouter une ligne de bus au systeme.
Si le numero de ligne de bus existe deja , un message d'erreur apparait , sinon elle est creer dans le systeme et par la suite le systeme se trie par ordre croissant des ligne de bus.
voici le code :
pendant l'execution , apres que j'ai rentree mes valeur le programme m'affiche le message d'erreur par rapport a ptr en ligne 60 et je ne comprend pas pourquoi !
merci d'avance !
le programme se decoupe en plusieurs fonction et je suis en train de creer la fonction qui consiste a rajouter une ligne de bus au systeme.
Si le numero de ligne de bus existe deja , un message d'erreur apparait , sinon elle est creer dans le systeme et par la suite le systeme se trie par ordre croissant des ligne de bus.
voici le code :
#include <iostream>
using namespace std;
#define MAX 10
void addline(int(*ptr)[3], int &nombredeligne);
bool search(int ligne, int(*ptr2)[3], int &nombredeligne);
void main()
{
int bus[MAX][3],nombredeligne;
int(*ptr)[3] = bus;
addline(bus, nombredeligne);
for (int i = 0; i < MAX; i++)
{
for (int j = 0; j < 3; j++)
{
cout<< *(*(ptr+i)+j ) <<" ";
}
cout << endl;
}
system("pause");
}
void addline(int (*ptr)[3], int &nombredeligne)
{
bool ok = true;
int ligne, station, temps, (*ptr2)[3];
ptr2 = ptr;
cout << "entrez le numero de ligne : ";
cin >> ligne;
cout << "entrez le nombre de station : ";
cin >> station;
cout << "entrez la duree du trajet : ";
cin >> temps;
ok = search(ligne,ptr,nombredeligne);
if (ok == false)
cout << "ce numero de ligne existe deja ! "<<endl;
else
{
*(*(ptr + nombredeligne)+0) = ligne;
*(*(ptr + nombredeligne) + 1) = station;
*(*(ptr + nombredeligne) + 2) = temps;
nombredeligne++;
for (int g = 0; g < nombredeligne; g++)
{
for (int f = g+1; f < nombredeligne; f++)
{
if (*(*(ptr + g)) > *(*(ptr + f)))
{
for (int m = 0; m < 3; m++)
{
*(*(ptr2 + g) + m) = *(*(ptr + g) + m);
*(*(ptr + g) + m) = *(*(ptr2 + f) + m);
*(*(ptr + f) + m) = *(*(ptr2 + g) + m);
}
}
}
}
cout << "votre ligne a bien ete ajoutee ! " << endl << endl;
}
}
bool search(int ligne,int (*ptr2)[3],int &nombredeligne)
{
for (int i = 0; i < nombredeligne; i++)
{
if (*(*(ptr2+i))== ligne)
return false;
}
return true;
}
pendant l'execution , apres que j'ai rentree mes valeur le programme m'affiche le message d'erreur par rapport a ptr en ligne 60 et je ne comprend pas pourquoi !
merci d'avance !
A voir également:
- Exception levée , violation d'acces en lecture
- Acces rapide - Guide
- Lecture epub sur pc - Guide
- Accès refusé - Guide
- Trousseau d'accès iphone - Guide
- Confirmation de lecture whatsapp - Guide
1 réponse
Bonjour,
Ligne 62 de ton code, ligne 40 du mien. A ton avis quelle est la valeur de
En changeant les notations pour une syntaxe plus claire, et en ôtant des variables égales dupliquées ton code s'écrit :
Ligne 62 de ton code, ligne 40 du mien. A ton avis quelle est la valeur de
nombredelignedès le début du programme?
En changeant les notations pour une syntaxe plus claire, et en ôtant des variables égales dupliquées ton code s'écrit :
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
constexpr int MAX = 10;
void addline( int ptr[][3], int &nombredeligne );
bool search( int ligne, int ptr2[][3], int nombredeligne );
int main() {
int bus[MAX][3], nombredeligne;
addline( bus, nombredeligne );
for ( int i = 0; i < MAX; i++ ) {
for ( int j = 0; j < 3; j++ ) {
cout << bus[i][j] <<" ";
}
cout << endl;
}
system( "pause" );
}
void addline( int ptr[][3] , int &nombredeligne ) {
int ligne, station, temps;
cout << "entrez le numero de ligne : ";
cin >> ligne;
cout << "entrez le nombre de station : ";
cin >> station;
cout << "entrez la duree du trajet : ";
cin >> temps;
bool ok = search( ligne, ptr, nombredeligne );
if ( !ok )
cout << "ce numero de ligne existe deja ! "<<endl;
else {
ptr[nombredeligne][0] = ligne;
ptr[nombredeligne][1] = station;
ptr[nombredeligne][2] = temps;
nombredeligne++;
for ( int g = 0; g < nombredeligne; g++ ) {
for ( int f = g+1; f < nombredeligne; f++ ) {
if ( ptr[g][0] > ptr[f][0] ) {
for ( int m = 0; m < 3; m++ ) {
//ptr[g][m] = ptr[g][m];
ptr[g][m] = ptr[f][m];
ptr[f][m] = ptr[g][m];
}
}
}
}
cout << "votre ligne a bien ete ajoutee !\n" << endl;
}
}
bool search( int ligne , int ptr2[][3] , int nombredeligne ) {
for ( int i = 0; i < nombredeligne; i++ ) {
if ( ptr2[i][0] == ligne )
return false;
}
return true;
}C'est encore de la syntaxe C à 99%, mais ça me pique moins les yeux, ça serait plus simple en C++. Je n'ai rien changé, mais les problèmes devraient être plus visibles.
où est cette ligne qui la met à 0?