Problème TD Mémoire

Voir le sujet précédent Voir le sujet suivant Aller en bas

Problème TD Mémoire

Message  Dj x-fuse le Lun 07 Mai 2012, 12:02

Bonjour à tous,

Dans le TD Mémoire, j'ai un soucis avec le code LaboMemoire0103. En effet, chez moi cela génère une segmentation fault. Suis-je le seul à avoir cela ?

Config : VM Ubuntu server 64bit.

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: Problème TD Mémoire

Message  iCart le Lun 07 Mai 2012, 12:19

J'ai la même erreur sur une VM Mandriva 32bit, j'ai rajouté un affichage dans la boucle pour voir a quel moment il plante exactement et selon l'opération, la segmentation fault arrive après +-1300 itérations...
Par contre, pas de problème sur les machines de l'école, donc je suspecte que l'erreur vient du fait d'utiliser une VM.

iCart

Nombre de messages : 58
Age : 27
Prénom : Sylvain
Statut : Echappé 2013
Date d'inscription : 09/12/2009

Revenir en haut Aller en bas

Re: Problème TD Mémoire

Message  galaeron le Lun 07 Mai 2012, 15:14

J'ai moi aussi un problème après 4043 itérations. (Bug à la 4044 donc)
Wattos (fork d'ubuntu) 32 bits
Après réexamination, et utilisation de gdb ca fonctionne.
Spoiler:
Code:
extern char _end;

#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
main()
{    int i=0,etas=(int)&_end,random;
   printf("Reservation de 10000 bytes sur le tas\n");
   etas=etas+10000;
   if (brk((char *)etas)<0) perror("brk");
      printf("sizeof adr %d\nsizeof char %d\nsizeof int %d\n",sizeof((&_end+i)),sizeof(char),sizeof(int));
   for (i=0;i<10000;i++){
      *(&_end+i)=(char)'a'+i%26;
      printf("%d %c\n",i,*(&_end+i));
   }
   random =(((int)rand())%10000);
   printf("%d random\n",random);
   printf("Une adresse au hasard : %d\n",random);
   printf("A cette adresse, on lit le caractère : %c\n",*(&_end+random));
   printf("Qui doit être %c\n",'a'+random%26);
   printf("Libération de la mémoire dynamique\n");
   if (brk(&_end)<0) perror("brk");
   exit(0);
}
$ gcc LaboMemoire0103.c -o LaboMemoire0103
$ gcc -ggdb LaboMemoire0103.c
$ gdb LaboMemoire0103
gdb> run

galaeron

Nombre de messages : 113
Age : 28
Prénom : Arthur
Statut : 3IR12
Date d'inscription : 29/06/2011

Revenir en haut Aller en bas

Re: Problème TD Mémoire

Message  Contenu sponsorisé Aujourd'hui à 05:23


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum