Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1504 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  violation d'acces avec fclose et delete

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

violation d'acces avec fclose et delete

n°1021018
barucca
Posté le 22-03-2005 à 15:07:30  profilanswer
 

Bonjour a tous,
 
je travaille sous C++ builder 5.2, lorsque je compile mon code tout se passe bien, mais lorsque je le lance j'ai des violations d'acces et je ne comprend pas à quoi ça correspond comme problème: si mon code n'est pas bon ou si j'ai un problème de mémoire ou autre...
je vous met la partie du code qui me fait les violations d'accés, j'ai marqué en commentaire où elles se manifestent le plus souvent, mais c'est aléatoire :

Code :
  1. void MaClasse::MaFonction ()
  2. {
  3.  TWindow     *Window = NULL;
  4. TWindow     *WindowTest = NULL;
  5. char far * str = NULL;
  6. int maxCount, maxCountTest, verif;
  7. char filename[20];
  8. char recherche [40];
  9. int flag;
  10. FILE *fp = NULL;
  11. str = new char far;
  12. fp = new FILE;
  13. Window = new TWindow(this);
  14. WindowTest = new TWindow(this);
  15. flag = 0;
  16. //recherche du type de fichier
  17. WindowTest = GetWindowPtr(GetActiveWindow());
  18. maxCountTest = WindowTest->GetWindowTextLength();
  19. WindowTest->GetWindowText(str,maxCountTest);
  20. strcpy(recherche, str);
  21. delete WindowTest; // violation d'acces ici
  22. for (int i=0; i<40; i++)
  23. {
  24.  if (recherche[i]=='[')
  25.  {
  26.   if(recherche[i+1]=='L')
  27.   {
  28.    flag = 0;
  29.    break;
  30.   }
  31.   else if (recherche[i+1]=='C')
  32.   {
  33.    flag = 1;
  34.    break;
  35.   }
  36.   else
  37.   {
  38.    flag = 2;
  39.    break;
  40.   }
  41.  }
  42. }
  43. //traitement
  44. if (flag == 1)
  45. {
  46.  Window = GetActiveMDIChild()->GetClientWindow();
  47.  maxCount = Window->GetWindowTextLength();
  48.  strcpy(filename,"C:\\test\\test.txt" );
  49.  if ((fp = fopen(filename, "w+" )) == NULL)
  50.  {
  51.   fprintf(stderr, "Erreur à l'ouverture du fichier %s en mode w+.\n\n", filename);
  52.   exit(1);
  53.  }
  54.  verif = (Window->GetWindowText(str,maxCount));
  55.  if(verif!=0)
  56.  {
  57.   fprintf(fp, "%s", str);
  58.  }
  59.  else
  60.  {
  61.   fprintf(fp, "il n'y a pas de texte" );
  62.  }
  63.  fclose(fp);//violation d'acces ici
  64.  delete fp;//violation d'acces a tous les "delete"
  65.  delete str;
  66.  delete Window;
  67. }
  68. else
  69. {
  70. suite.....
  71. }
  72. }


 
Quelqu'un a t'il le courage de me donner un coup de main?? ;)
 
Merci


Message édité par barucca le 22-03-2005 à 18:48:51
mood
Publicité
Posté le 22-03-2005 à 15:07:30  profilanswer
 

n°1024107
IrmatDen
Posté le 24-03-2005 à 20:27:13  profilanswer
 

1. Pour accéder à un fichier tu n'as pas à allouer un FILE, ni à le delete après. D'autant plus que FILE c'est du C et pas du C++, tout comme tes fprintf, etc...;
2. Pourquoi allouer WindowTest pour après le remplacer par un pointeur vers la fenêtre active et surtout essayer de supprimer cette fenêtre ?
 
Tu fais des new et des delete qui n'ont absolument rien à faire là ! Je ne saurais que trop te recommander de prendre le temps de lire un cours de C++ au plus vite.

n°1024140
Taz
bisounours-codeur
Posté le 24-03-2005 à 20:54:47  profilanswer
 

pourquoi tu fais un delete ?
 
pourquoi tu utilises les FILE* ? c'est du C !
pourquoi tu utilises les char* ? c'est du C !
 
et en plus comme t'y comprends rien, ben ton programme fait n'importe quoi !

n°1024142
Taz
bisounours-codeur
Posté le 24-03-2005 à 20:55:07  profilanswer
 

#include <fstream>
#include <string>
 
using namespace std;

n°1024228
el muchach​o
Comfortably Numb
Posté le 24-03-2005 à 22:02:50  profilanswer
 

Barucca, soit tu utilises les fstream, soit à la rigueur tu te crées une classe fichier dans laquelle tu fais un fclose dans le destructeur (en prenant soin de pas lever d'exception).

n°1028454
barucca
Posté le 29-03-2005 à 15:14:19  profilanswer
 

merci à ceux qui ont répondu gentiment.  
J'ai fini par trouver où été l'erreur principale, j'avais plusieurs erreurs, bien sur, dont des tableau avec de mauvaises tailles donc j'empiété sur le parametre suivant dans la pile. Bien qu'étant du C les FILE etc... peuvent fonctionner en C++.

n°1028499
Taz
bisounours-codeur
Posté le 29-03-2005 à 15:47:25  profilanswer
 

ça peut, mais c'est dégeux, contraire à l'esprit du C++ et terriblement casse gueule.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  violation d'acces avec fclose et delete

 

Sujets relatifs
[ASP.NET] Probleme d'acces BDAcces aux fonctionnalités windows en C.
Access violation dans Delphi 7creation bouton pour acces paramètres matos
[analysis services] acces par un autre domaine.[C#/PPT] Ouverture d'un fichier PPT et accès aux variables
[JSP] Accès aux "Data Sources" de l'application impossiblepb chemin d'accès à un fichier
Droit d'acces restreint a une base accessProblème MySQL, accès localhost supprimé
Plus de sujets relatifs à : violation d'acces avec fclose et delete


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR