Process terminated with status -1073741819

Résolu/Fermé
chips - 27 févr. 2009 à 11:49
 chips - 1 mars 2009 à 17:01
Bonjour
J'ai un pbm à la fermeture de la console, un message s'affiche (Process terminated with status -1073741819).j'ai trouvé qu'il s'arrete a l'instruction p1->v=B->d;
...
while(p){
B=sommet(p);
p=depiler(p);
if(B->g!=NULL ){
int j=B->info.sk;
ret=j/16; j=j % 16;
if (j==0){ret--;j=16;}
if(((tab[ret] << (j-1)) & BIT)!=BIT)
{p=empiler(p,B->g);}
//p=empiler(p,B->d);
pile p1;if(kanardo=='y')printf(" 132");
p1=(cellule*)malloc(sizeof(cellule));
p1->v=B->d;<-------------------------------------------------
p1->suiv=p;
p=p1;
}else{
...
j'ai fait une petite modification,pgm s'arrete a: p=empiler(p,B->g);
while(p){
B=sommet(p);
p=depiler(p);
if(B->g!=NULL ){
p=empiler(p,B->d);<---------------------------------Fait
int j=B->info.sk;
ret=j/16; j=j % 16;
if (j==0){ret--;j=16;}
if(((tab[ret] << (j-1)) & BIT)!=BIT)
{p=empiler(p,B->g);<---------------------------------s'arrete}
}else{
...
j'ai essayé de faire p=empiler(p,NULL); avant p=empiler(p,B->g); pr voir si le pbl est dans B->g sa ma rien donné ,il s'arrete encore
je sais pas ou est le pbm ,est ce que la pile est pleine,est ce que je peux la remplacer par autre chose .aidez moi svp
merci
A voir également:

3 réponses

bsr loupius,j'ai resolé mon probleme:j'ai ajouter dns dépiler linst (*):
....
p2=p->suiv;
free(p);<-----------(*)
p=p2;
avant quand je depile je libere pas lespace occupé par l elt depiler;
bon le but de mon pgm c'est generer les itemset frequents (domaine de fouille de données 'data mining') (voila un site specialisé <fimi.cs.helsinki.fi>)
donc je fait appele a toute personne qui sinteresse a ce teme(qui est un teme de recherche) ou qui a connaissance en pgrammation c sous unix(car il faut que j'execute mon pgm sous unix pour le comparai avc dautre pgm comme apriori par ex)de bien vouloir me contacter j'ai besoin daide
merci-aurevoir
1
Il est probable comme trop souvent qu'il s'agisse d'un problème de pointeur.
Je vais avoir du mal à t'aider car on a pas tout le code (que font les fonctions comme 'sommet', 'empiler', 'depiler', ...).
Après un appel à 'malloc': p1=(cellule*)malloc(sizeof(cellule));, il faut toujours tester la valeur de retour; si elle est nulle c'est que le tas est plein (et pas la pile qui se remplit des appels à sous-programme, des interruptions ou des variables locales)?
Pour trouver l'erreur, il y a principalement la méthode du débugger et la méthode du 'printf'. On peut afficher la valeur du pointeur par: printf ("p1 = %p\n", p1);
NB: ne pas hésiter à utiliser la balise de code se trouvant en haut et à gauche de la zone de texte entre la balise 'sousligné' et la balise 'lien'.
0
Bjr,merci loupius pr ta reponse.j'ai fait se que tu ma dit,en effet il s'agit d'un problème de pointeur.
voila kesk ma donné l'execution:
pile empiler(pile p,arbre b){
pile p1;
printf(" p1= %p ",p1);
p1=(cellule*)malloc(sizeof(cellule));
printf("*p1= %p\n",p1);
p1->v=b;
p1->suiv=p;
return p1;
}
...
p1=0000000E *p1=7F6EFFD8
p1=7F6EFFD8 *p1=7F6EFFE8
p1=7F6EFFE8 *p1=7F6EFFF8
p1=7F6EFFF8 *p1=00000000/*mon pbm est là*/ /*le pointeur est arrivé a sa valeur max?*/

Il faut faire quoi pr eviter se pbm?
0
C'est bizzare... ce n'est pas trois appels à malloc qui remplit le tas....
Bizzare aussi ton écriture:
pile p1;
p1=(cellule*)malloc(sizeof(cellule));
j'aurais plutôt écrit:
pile p1;
p1=(pile)malloc(sizeof(pile));
Mais 'pile', c'est quoi? un 'typedef'? une classe?
Je n'ai pas assez d'élément pour te répondre... et puis le peu de code que l'on a n'est pas indenté, c'est pénible à lire.
0