Résolu Une fonction qui ne marche pas sous Linux ?

Solutions (4)
Tags :
  • Windows
  • Compile
  • Consoles
  • G++
  • linux
  • Programmation
|
Bonjour !
Je travaille en langage C, sous Linux, (j'utilise gcc pour compiler) et j'ai voulu utiliser une vieille fonction que j'ai gardée du temps où j'avais Windows. Or, si la fonction marchait parfaitement sous Windows, sous Linux on m'affiche un de ces bazars en console !!
Je vous joins ci-dessous la fonction et le fameux bordel. Quel est le problème? Merci d'avance pour vos réponses !

  1. // Fonction qui permet d'ajouter au fur et à mesure des nombres tapés par l'utilisateur dans un tableau
  2. void ajouter(int **tab,int nb, int taille)
  3.  
  4. {
  5.  
  6. int *temp = malloc(taille*sizeof(int));
  7.  
  8. int *tableau = *tab;
  9.  
  10. int i;
  11.  
  12. for(i=0;i<taille-1;i++) // Taille-1 car on laisse une place au nombre à ajouter
  13.  
  14. {
  15.  
  16. *(temp+i) = *(tableau+i);
  17.  
  18. }
  19.  
  20.  
  21.  
  22. *(temp+taille-1) = nb;
  23.  
  24. free(*tab);
  25.  
  26. *tab = temp;
  27.  
  28. }


  1. // Résultat en console
  2. laila@Laila:~/Documents/Programmation/Prog/Bazar/Fonctions$ gcc ajouterValeurTableau.c -o ajouter -Wall
  3. laila@Laila:~/Documents/Programmation/Prog/Bazar/Fonctions$ ./ajouter
  4. Saisissez un nombre
  5. 2
  6. *** glibc detected *** ./ajouter: munmap_chunk(): invalid pointer: 0x00a26345 ***
  7. ======= Backtrace: =========
  8. /lib/tls/i686/cmov/libc.so.6[0xa61ff1]
  9. /lib/tls/i686/cmov/libc.so.6[0xa631f5]
  10. ./ajouter[0x804857f]
  11. ./ajouter[0x80485e6]
  12. /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xa0db56]
  13. ./ajouter[0x8048481]
  14. ======= Memory map: ========
  15. 00128000-00129000 r-xp 00000000 00:00 0 [vdso]
  16. 0069c000-006b8000 r-xp 00000000 08:07 525 /lib/libgcc_s.so.1
  17. 006b8000-006b9000 r--p 0001b000 08:07 525 /lib/libgcc_s.so.1
  18. 006b9000-006ba000 rw-p 0001c000 08:07 525 /lib/libgcc_s.so.1
  19. 009f7000-00b35000 r-xp 00000000 08:07 131544 /lib/tls/i686/cmov/libc-2.10.1.so
  20. 00b35000-00b36000 ---p 0013e000 08:07 131544 /lib/tls/i686/cmov/libc-2.10.1.so
  21. 00b36000-00b38000 r--p 0013e000 08:07 131544 /lib/tls/i686/cmov/libc-2.10.1.so
  22. 00b38000-00b39000 rw-p 00140000 08:07 131544 /lib/tls/i686/cmov/libc-2.10.1.so
  23. 00b39000-00b3c000 rw-p 00000000 00:00 0
  24. 00de0000-00dfb000 r-xp 00000000 08:07 152 /lib/ld-2.10.1.so
  25. 00dfb000-00dfc000 r--p 0001a000 08:07 152 /lib/ld-2.10.1.so
  26. 00dfc000-00dfd000 rw-p 0001b000 08:07 152 /lib/ld-2.10.1.so
  27. 08048000-08049000 r-xp 00000000 08:07 927945 /home/laila/Documents/Programmation/Prog/Bazar/Fonctions/ajouter
  28. 08049000-0804a000 r--p 00000000 08:07 927945 /home/laila/Documents/Programmation/Prog/Bazar/Fonctions/ajouter
  29. 0804a000-0804b000 rw-p 00001000 08:07 927945 /home/laila/Documents/Programmation/Prog/Bazar/Fonctions/ajouter
  30. 08725000-08746000 rw-p 00000000 00:00 0 [heap]
  31. b7841000-b7842000 rw-p 00000000 00:00 0
  32. b7851000-b7855000 rw-p 00000000 00:00 0
  33. bf988000-bf99d000 rw-p 00000000 00:00 0 [stack]
  34. Abandon


Contenus similaires
Meilleure solution
partage
|
A oui ... Le "free", je n'avais même pas remarqué ...

Donc, si ça marche sous Windows c'est parce que ce système est instable et tout pourri :o 
  • Commenter cette solution |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par Alcooline.
  • Commenter cette réponse |
Score
0
òh
òi
|
Heu non, je ne connaissais pas GDB jusque là, et là je viens de lire un tutoriel sur ça, je n'ai rien compris :pt1cable: 

EDIT : un ami m'a fait remarqué que j'utilisais free sur un pointeur non alloué (*tab) , effectivement quand je l'enlève ça marche. Mais bon je comprends toujours pas pourquoi ça marchait sur Windows et pas là.
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour,

J'ai beau lire et relire la fonction, je ne vois pas le problème...

T'as essayé de passer en débuggage ? GDB
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS