[C++]Un truc bizarre!

Un truc bizarre! [C++] - Programmation

Marsh Posté le 21-06-2001 à 19:27:50    

J'ai un truc un peu bizarre dans mon code.
J'ai cree un buffer avec malloc et une variable temporaire ( char temp[1] ).
Quand je lis ou j'ecris ds le buffer il n'y a aucun probleme.
temp[0]=buffer[2] <== ca marche.
Mais lorsque je remplis ce buffer avec un bout de fichier avec la fonction fread, je ne peux plus ni lire, ni ecrire ds le buffer alors que ce marche avant fread!
Le compilo compile mais c'est lors de l'execution du programme que j'ai un gros message d'erreur venant de windows.
Comment ca se fait et comment puis je faire pour que ca marche?

Reply

Marsh Posté le 21-06-2001 à 19:27:50   

Reply

Marsh Posté le 21-06-2001 à 19:56:40    

Ben c'est quoi le message? Et le code?

Reply

Marsh Posté le 21-06-2001 à 21:33:46    

Le message d'erreur de windows est "Ce programme va etre arrete car il a effectue une operation non conforme".La routine koa.
Et le bout de code:
buffer = (char *) malloc ( width * height * ( bpp/8));
 
 if ( buffer == NULL)
 {
  printf("Erreur lors de l'allocation de memoire\n" );
 }
 
 temp[0]=buffer[2]; // la, on peut lire et ecrire ds le buffer.
 if ( bpp == 24)
 {
  int i=0;
  fseek ( fp, 18, SEEK_SET);
  verif = fread ( &buffer , sizeof (buffer), 1, fp);
  if ( verif != 1)
  {
   printf("Erreur lors de la lecture de l'image\n" );
  }
  else  
  {
   printf("Lecture OK\n" );
  }
  fclose ( fp);
 temp[0]=buffer[2];    <
 temp[1]=buffer[0];    < la ca marche plus et j'ai le message.

Reply

Marsh Posté le 21-06-2001 à 21:46:53    

Comment est déclaré temp ?

Reply

Marsh Posté le 21-06-2001 à 21:53:49    

Citation :

BifaceMcLeOD Comment est déclaré temp ?  


 
comme ca:
char temp[2];

Reply

Marsh Posté le 21-06-2001 à 22:06:45    

Je viens de voir l'erreur.
Tu as écris :

Code :
  1. verif = fread ( &buffer , sizeof (buffer), 1, fp);


 
Ce qui signifie que tu modifies ici le pointeur buffer et non pas la zone mémoire qu'il pointe. Et évidemment, après buffer va pointer sur n'importe quoi, et le premier accès à la zone nouvellement pointée fera SEGV...
 
A mon avis, tu dois écrire:

Code :
  1. verif = fread ( buffer , buffer_length, 1, fp);


avec un buffer_length initialisé comme suit avant :

Code :
  1. int buffer_length =  width * height * ( bpp/8);
  2. buffer = (char *) malloc (buffer_length * sizeof(char));

Reply

Marsh Posté le 22-06-2001 à 12:35:48    

En effet, c'etait bien ca..
C'est vrai que je me suis toujours enmelés les pinceaux avec les pointeurs.
Heureusement que tu etais la car j'aurais jamais trouve tout seul.
Je me pose quand meme question. Qu'est ce qui te pousse a repondre a des questions comme les miennes sur un forum de prog. Paske tu est quand un monstre de laprog (sisi). Ca t'aide pour ton boulot de rechercher des erreurs, tu le fais paske kkun t'as aide lorsque tu debutais, ou justement personne ne t'as aide....
Mais en tout cas c'est vraiment super sympa.Merci bien
@++.

Reply

Marsh Posté le 22-06-2001 à 12:58:36    

Yush a écrit a écrit :

Paske tu est quand un monstre de laprog (sisi).




 
:sol: tranquille le biface

 

[edit]--Message édité par tgrx--[/edit]

Reply

Marsh Posté le 22-06-2001 à 19:08:47    

Non, je ne me considère pas comme un monstre de la programmation ;)
Par contre, j'aime bien aider les gens. Chose que je faisais déjà j'étais étudiant (avec mes copains de promo).
 
Et puis débarquer dans un code que tu n'as pas écrit et arriver à en trouver les erreurs rapidement est un exercice intellectuel très intéressant (quoi que difficile, je suis très loin d'y arriver), et qui en plus (là oui) me sert dans mon travail.

Reply

Marsh Posté le 22-06-2001 à 23:18:50    

Depuis combien d'annee tu programme.
(tu remarqueras que je ne te demande pas le nombre d'heure passer a programmer!).
Et t'as fait quoi comme parcours scolaire?.
Sinon ca marche et j'ai fini mon loader de fichier TGA.

Reply

Marsh Posté le 22-06-2001 à 23:18:50   

Reply

Marsh Posté le 22-06-2001 à 23:30:33    

Je suis tombé dans la programmation étant petit... :D
Sinon, j'ai un diplôme d'ingénieur (je cite) "spécialisé en techniques informatiques" depuis 4 ans (ceux qui connaissent ce titre devraient reconnaître d'où je viens :D ).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed