Problème de code C++
etudiantmastere
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
j'ai écrit un programme C++ pour implémenter mon approche de recherche. Mon code est compilé. Mais, le problème réside dans le fait que lorsque je l'exécute en faisant le test sur un fichier de grande taille, je ne reçoit aucun résultat sauf un message du système "Windows a cessé de fonctionner". Il faut noter que lorsque j'utilise un fichier de petite taille, le programme s'exécute et marche bien.
Merci de me répondre.
j'ai écrit un programme C++ pour implémenter mon approche de recherche. Mon code est compilé. Mais, le problème réside dans le fait que lorsque je l'exécute en faisant le test sur un fichier de grande taille, je ne reçoit aucun résultat sauf un message du système "Windows a cessé de fonctionner". Il faut noter que lorsque j'utilise un fichier de petite taille, le programme s'exécute et marche bien.
Merci de me répondre.
A voir également:
- Problème de code C++
- Code ascii - Guide
- Code de déverrouillage oublié - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
6 réponses
salut.
Tu ne décrit pas baucoup ton problème et tu ne mets même pas un morceau de code, il est très difficile de t'aider.
Selon ce que tu dits, je dirai que tu as un problème d'allocation mémoire qui est trop petit à un moment donnée.
Ou alors que la taille de ton fichier est trop grande pour la RAM (du genre 10Go)
Quelle est la tailel de ton fichier ?
Tu ne décrit pas baucoup ton problème et tu ne mets même pas un morceau de code, il est très difficile de t'aider.
Selon ce que tu dits, je dirai que tu as un problème d'allocation mémoire qui est trop petit à un moment donnée.
Ou alors que la taille de ton fichier est trop grande pour la RAM (du genre 10Go)
Quelle est la tailel de ton fichier ?
salut,
D'abord merci pour votre réponse.En ce que concerne mon code, il s'agit d'un programme C++ qui contient plusieurs fonctions reliées entre elles. IL est trés long donc je peux pas le mettre tout.
En ce que concerne les fichiers, le premier fichier (de petite taille) est de taille 71 octets alors que le deuxième fichier (de grande taille) est de taille 697 octets.
D'abord merci pour votre réponse.En ce que concerne mon code, il s'agit d'un programme C++ qui contient plusieurs fonctions reliées entre elles. IL est trés long donc je peux pas le mettre tout.
En ce que concerne les fichiers, le premier fichier (de petite taille) est de taille 71 octets alors que le deuxième fichier (de grande taille) est de taille 697 octets.
697 octets c'est énorme !!!
Est-ce qu'on peut savoir quelles genres d'opérations tu fait sur ce fichier.
En général "Windows a cessé fonctionner" lorsque on utilise un emplacement mémoire auquel on est pas autorisé, par exemple lorsqu'on utilise des char* sans les allouer au préalable, dans ce cas si 71 octets passe c'est parce qu'on reste dans la zone de mémoire autorisée au programme, mais avec 697 on déborde, et Windows n'aime pas du tout qu'on touche à de la mémoire qui nous appartient pas !
Est-ce qu'on peut savoir quelles genres d'opérations tu fait sur ce fichier.
En général "Windows a cessé fonctionner" lorsque on utilise un emplacement mémoire auquel on est pas autorisé, par exemple lorsqu'on utilise des char* sans les allouer au préalable, dans ce cas si 71 octets passe c'est parce qu'on reste dans la zone de mémoire autorisée au programme, mais avec 697 on déborde, et Windows n'aime pas du tout qu'on touche à de la mémoire qui nous appartient pas !
Oui mais dans ce cas ce serait une erreur du type 'erreur de protection', de là à avoir ce drôle de message : 'Windows à cessé de fonctionner'... Il doit vraiment falloir pousser loin !
@EtudiantMastere : est-tu sûr de ne pas faire des confusions d'ordre de grandeur concernant la taille des fichiers et la taille d'allocation mémoire ? Car il faut le dire, 697 octets et appeler ça un fichier de grande taille... C'est ce qu'auraient dit les informaticiens travaillant sur l'ENIAC, il y a 60 ans !
@EtudiantMastere : est-tu sûr de ne pas faire des confusions d'ordre de grandeur concernant la taille des fichiers et la taille d'allocation mémoire ? Car il faut le dire, 697 octets et appeler ça un fichier de grande taille... C'est ce qu'auraient dit les informaticiens travaillant sur l'ENIAC, il y a 60 ans !
à part la solution de KX, je ne vois pas.
Sans code, on peut faire beaucoup d'hypothèses...
Déjà as tu bien mis toutes les vérification d'usage , (genre vérifier que le fichier est bien ouvert etc.)
Il nous faudrait juste le bout de code qui lit le fichier et l'initialisation éventuelle des paramètres.
EDit: j'oubliai, tu peux aussi utiliser un debugueur pour savoir d'où vient le problème.
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
Sans code, on peut faire beaucoup d'hypothèses...
Déjà as tu bien mis toutes les vérification d'usage , (genre vérifier que le fichier est bien ouvert etc.)
Il nous faudrait juste le bout de code qui lit le fichier et l'initialisation éventuelle des paramètres.
EDit: j'oubliai, tu peux aussi utiliser un debugueur pour savoir d'où vient le problème.
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
Voici le bout de code qui lit le fichier, j'ai vérifie bien si le fichier a été ouvert ou pas:
void ReadInputFile()
{
ifstream fscan;
int i,o,t;
int numlinks=0, numnodes=0;
string namefile;
listn=new listnodes();
liste=new listedges();
cout<<"INPUT FILE :\n";
cin >>namefile;
fscan.open(namefile.c_str(),ios::in);
if(fscan.is_open())
{
cout <<" \n \n the " << namefile.c_str()<<" is open \n \n \n";
while(!fscan.eof())
{
fscan >> i >> o ;
if(o>i)
{
t=i;
i=o;
o=t;
}
numlinks++;
if(i>numnodes)
numnodes=i;
if(listn->contient(i)==false)
{
listn->ajouter(i);
}
if(listn->contient(o)==false)
{
listn->ajouter(o);
}
if(liste->contient(i,o)==false)
{
liste->ajouter(i,o);
}
}
//listn->afficher();
//liste->afficher();
cout<<"the network is composed of "<<numnodes<< " nodes and "<<numlinks - 1<< " edges \n \n";
net=new network(numnodes,numlinks -1);
}
else
cout<<"Unable to open the "<<namefile.c_str()<<"\n \n";
}
void ReadInputFile()
{
ifstream fscan;
int i,o,t;
int numlinks=0, numnodes=0;
string namefile;
listn=new listnodes();
liste=new listedges();
cout<<"INPUT FILE :\n";
cin >>namefile;
fscan.open(namefile.c_str(),ios::in);
if(fscan.is_open())
{
cout <<" \n \n the " << namefile.c_str()<<" is open \n \n \n";
while(!fscan.eof())
{
fscan >> i >> o ;
if(o>i)
{
t=i;
i=o;
o=t;
}
numlinks++;
if(i>numnodes)
numnodes=i;
if(listn->contient(i)==false)
{
listn->ajouter(i);
}
if(listn->contient(o)==false)
{
listn->ajouter(o);
}
if(liste->contient(i,o)==false)
{
liste->ajouter(i,o);
}
}
//listn->afficher();
//liste->afficher();
cout<<"the network is composed of "<<numnodes<< " nodes and "<<numlinks - 1<< " edges \n \n";
net=new network(numnodes,numlinks -1);
}
else
cout<<"Unable to open the "<<namefile.c_str()<<"\n \n";
}
voici la classe qui décrit listnodes :(listnodes est une liste chainée de noeuds ).
En ce concerne l'ajout. Chaque fois que je lis un noeud je l'insert dans listn(qui est une liste de neouds)
class listnodes
{
public:
node *first;
listnodes();
~listnodes();
void ajouter(int);
bool contient(int);
void afficher();
};
listnodes::listnodes()
{
first=NULL;
}
listnodes::~listnodes()
{
while(first!=NULL)
{
node *n=first;
first=n->next;
delete n;
}
}
void listnodes::ajouter(int x)
{
node *n=new node;
n->id=x;
n->next=first;
first=n;
}
bool listnodes::contient(int x)
{
for (node *c=first; c!=NULL; c=c->next)
if(c->id==x)
return true;
return false;
}
void listnodes::afficher()
{
for(node *n=first;n!=NULL;n=n->next)
cout <<"NODE: " <<n->id <<" "<<"DEGREE: "<<n->degree <<"\n";
}
En ce concerne l'ajout. Chaque fois que je lis un noeud je l'insert dans listn(qui est une liste de neouds)
class listnodes
{
public:
node *first;
listnodes();
~listnodes();
void ajouter(int);
bool contient(int);
void afficher();
};
listnodes::listnodes()
{
first=NULL;
}
listnodes::~listnodes()
{
while(first!=NULL)
{
node *n=first;
first=n->next;
delete n;
}
}
void listnodes::ajouter(int x)
{
node *n=new node;
n->id=x;
n->next=first;
first=n;
}
bool listnodes::contient(int x)
{
for (node *c=first; c!=NULL; c=c->next)
if(c->id==x)
return true;
return false;
}
void listnodes::afficher()
{
for(node *n=first;n!=NULL;n=n->next)
cout <<"NODE: " <<n->id <<" "<<"DEGREE: "<<n->degree <<"\n";
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je ne suis pas sur, mais je pense que l'erreur viens de ta liste chaînée.
essai de modifier ta boucle ainsi :
for (node *c=first; c->next!=NULL; c=c->next)
et traiter le cas où first ent nul à part.
essai de modifier ta boucle ainsi :
for (node *c=first; c->next!=NULL; c=c->next)
et traiter le cas où first ent nul à part.
voici un petit détail sur le problème que je rencontre:
Nom d'événement de problème: APPCRASH
Nom de l'application: Projectinit.exe
Version de l'application: 0.0.0.0
Horodatage de l'application: 4e6a5e1c
Nom du module par défaut: Projectinit.exe
Version du module par défaut: 0.0.0.0
Horodateur du module par défaut: 4e6a5e1c
Code de l'exception: c0000005
Décalage de l'exception: 000308ac
Version du système: 6.0.6002.2.2.0.768.3
Identificateur de paramètres régionaux: 1036
Information supplémentaire n° 1: 9ae9
Information supplémentaire n° 2: 3684fa8e471ba4dc8e532f46e006f437
Information supplémentaire n° 3: d247
Information supplémentaire n° 4: aad88ca616134c092d08e77427a843f7
Nom d'événement de problème: APPCRASH
Nom de l'application: Projectinit.exe
Version de l'application: 0.0.0.0
Horodatage de l'application: 4e6a5e1c
Nom du module par défaut: Projectinit.exe
Version du module par défaut: 0.0.0.0
Horodateur du module par défaut: 4e6a5e1c
Code de l'exception: c0000005
Décalage de l'exception: 000308ac
Version du système: 6.0.6002.2.2.0.768.3
Identificateur de paramètres régionaux: 1036
Information supplémentaire n° 1: 9ae9
Information supplémentaire n° 2: 3684fa8e471ba4dc8e532f46e006f437
Information supplémentaire n° 3: d247
Information supplémentaire n° 4: aad88ca616134c092d08e77427a843f7