Problème de code C++

etudiantmastere -  
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.
A voir également:

6 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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 ?
0
etudiantmastere
 
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.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 !
0
nicocorico Messages postés 799 Date d'inscription   Statut Membre Dernière intervention   138
 
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 !
0
etudiantmastere
 
J'ai pas compris exactement lorsque vous disez "erreur de protection"
0
nicocorico Messages postés 799 Date d'inscription   Statut Membre Dernière intervention   138
 
L'erreur de protection, c'est lorsqu'on tente d'accéder à une zone mémoire qui est employée par d'autres application, ce qui déclenche une interruption évitant la manoeuvre, protégeant ainsi la modification inopportune des données...
0
etudiantmastere
 
Vous voulez dire que mon problème que mon problème réside dans le fait que la mémoire dont mon pc dispose est insuffisante pour exécuter mon programme.?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
à 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
0
etudiantmastere
 
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";



}
0
etudiantmastere
 
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";

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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.
0
etudiantmastere
 
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
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Utilise un débogueur pour identifier la ligne de code incriminée, ce sera bien plus utile que ces informations qui ne nous servent à rien pour t'aider !
0
etudiantmastere
 
Merci KX pour vos réponses.j'aimerai que vous me donnez un nom de débogueur ou un lien qui me permet de l'installer.
merci d'avance
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Regarde la liste des IDE, ils ont quasiment tous un débogueur intégré.
0