petit probleme de memoire!!!

petit probleme de memoire!!! - C++ - Programmation

Marsh Posté le 13-03-2003 à 22:08:15    

bonjour tout le monde je ne comprend pas pourquoi il m'affiche cette erreur
voici le programme:

Code :
  1. [cpp]#include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include<malloc.h>
  5. #include <io.h>
  6. #include <string.h>
  7. #define N 1
  8. int a[N];
  9. int de;
  10. int Initialisation()       //création d'une liste de nombres aléatoires
  11. {
  12.    int i ;
  13.  
  14.  
  15.    unsigned germe = time (NULL);   //pour que le générateur de nombres aléatoires rand()
  16.    srand (germe);                  //soit initialisé avec un autre nombre à chaque tirage
  17.    for (i = 0; i < N; i++)                     
  18.    de=a[i]=rand()%5;        //génère des nombres aléatoires entre 0 et 999
  19.    return(de);
  20. }
  21. void Affichage()
  22. {
  23.    int i ;
  24.    for (i = 0; i<N; i++)
  25.       printf ( "%3d ", a[i]) ;
  26.    printf ("\n" ) ;
  27. }
  28. void question()
  29. {
  30. FILE *ptr;
  31. char *d=(char *)malloc(1024*sizeof(char)),*c;
  32. itoa(de,d,10);
  33.     c=strcat(d,".txt" );
  34.  ptr=fopen(c,"r" );
  35.  memset(d,1024,sizeof(char));
  36.         while(fgets(d,32,ptr)){
  37.  printf("%s",d);}
  38. fclose(ptr);
  39. }// le probleme concerne cette partie sans cette partie tout fonctionne!!!!
  40. void reponse()
  41. {
  42. int point=0;
  43. int camenbert=0;
  44. int x;
  45. printf("\nvotre reponse:\n" );
  46.  scanf("%d",x);
  47.   if(x==2)
  48.   {
  49.    printf("\nbravo vous obtenez un point supplementaire!!" );
  50.    point++;
  51.    printf("\nvous avez %d point.\n",point);
  52.    if(point==3 && point==6 && point==9 && point==12 && point==15 && point==18)
  53.    {printf("vous avez %d camenbert",point/3);}
  54.   }
  55.   if(x!=2)
  56.   {
  57.    printf("\nvous avez perdu. la bonne reponse etait la 2.\n\njoueur suivant" );
  58.   }
  59. }// fin du probleme.
  60. //_______________________________________________
  61. void main()
  62. {
  63.    int de;
  64.    de =Initialisation() ;
  65.    Affichage() ;
  66.    question();
  67.    reponse();
  68. }


le message d'erreur est le suivant:
l'instruction à "0x00411c58" emploie l'adresse mémoire "0xcccccccc". la memoire ne peut etre "written".
que pensez vous de ceci et comment je peux resoudre mon probleme???
merci de me sortir de ce mer.... ;)

Reply

Marsh Posté le 13-03-2003 à 22:08:15   

Reply

Marsh Posté le 13-03-2003 à 22:13:25    

int x;
     printf("\nvotre reponse:\n" );
      scanf("%d",x);
 
risible
 
scanf("%d", &x);

Reply

Marsh Posté le 13-03-2003 à 22:45:20    

ouai c'est claire j'ai remarqué en me re lisant 15 foi

Reply

Marsh Posté le 13-03-2003 à 23:23:09    

quelq'un peu m'expliquer la fonction recursive???
mon programme s'arrete apré avoir posé une question . biensur le but é de poser une autre question et encore un autre et ainsi de suite et il me semble qu'il faut que j'utilise une fonction recursive mais je ne sais pas comment sa marche. donc si quelq'un peut m'expliquer...
ou alors si il y a un autre moyen me dire lequel merci.

Reply

Marsh Posté le 13-03-2003 à 23:33:08    

wouschy a écrit :

quelq'un peu m'expliquer la fonction recursive???
mon programme s'arrete apré avoir posé une question . biensur le but é de poser une autre question et encore un autre et ainsi de suite et il me semble qu'il faut que j'utilise une fonction recursive mais je ne sais pas comment sa marche. donc si quelq'un peut m'expliquer...
ou alors si il y a un autre moyen me dire lequel merci.


 
Tu n'as pas besoin d'une fonction récursive pour faire ça ! Une simple boucle suffit.
Par contre, pour ton information, une fonction récursive est une fonction qui s'appelle elle-même. Un exemple à  la con :

Code :
  1. void recur( int& monint )
  2. {
  3. monint++;
  4. if( monint < 8 )
  5. recur( monint );
  6. }


---------------
each day I don't die is cheating
Reply

Marsh Posté le 13-03-2003 à 23:55:01    

ok je te remercie pour ce petit exemple.
 
une petite derniere le "monint" se refer à quoi si tu le place dans mon exemple??
 
et le "monint<8" tu as mis sa comme ça c'est une valeur quelconque? (et si c'est sa cette valeur ce refere a quoi???)
merci. :)

Reply

Marsh Posté le 14-03-2003 à 01:41:30    

wouschy a écrit :

une petite derniere le "monint" se refer à quoi si tu le place dans mon exemple??


 
A rien, c'est un exemple de fonction récursive. Dans ton cas tu n'en as pas besoin (je crois).
 
Dans ton cas, tu fais juste un truc du genre :

Code :
  1. while( le_jeu_n_est_pas_fini )
  2. {
  3. pose_une_question();
  4. reponse = attend_une_reponse();
  5. ajuste_le_score( la_reponse_est_elle_juste( reponse ) );
  6. }


Il te faut une simple boucle.
 

wouschy a écrit :

et le "monint<8" tu as mis sa comme ça c'est une valeur quelconque? (et si c'est sa cette valeur ce refere a quoi???)
merci. :)


 
Je l'ai mis parce qu'une fonction récursive doit bien s'arrêter un jour (sinon tu explose la pile) ! Ma fonction fait un truc dans le genre :

recur(0)
  incrément de 0 -> 1
  recur(1)
    incrément de 1 -> 2
    recur(2)
      incrément de 2 -> 3
      recur(3)
        incrément de 3 -> 4
        recur(4)
          incrément de 4 -> 5
          recur(5)
            incrément de 5 -> 6
            recur(6)
              incrément de 6 -> 7
              recur(7)
                incrément de 7 -> 8
                test faux donc pas d'appel de recur !


 
On voit que si je ne faisais pas le test, on aurais appelé recur un nombre infini de fois. Enfin pas vraiment infini car la pile explose bien avant l'infini !


Message édité par gatorette le 14-03-2003 à 01:44:54

---------------
each day I don't die is cheating
Reply

Marsh Posté le 14-03-2003 à 08:46:03    

wouschy a écrit :


//pour que le générateur de nombres aléatoires rand()
//soit initialisé avec un autre nombre à chaque tirage


 
non, c'est mal.
 
Il faut  l'initialiser au début de l'application, et pas à chaque tirage. Sinon le générateur aléatoire risque de ne pas être assez aléatoire.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 14-03-2003 à 14:20:01    

ok merci je pense avoir compris!
je vais essayer de faire la suite.
merci

Reply

Marsh Posté le 15-03-2003 à 01:35:29    

monint : nivo de récursion maxi apparemment; sinon tchao la pile
 
concernant la récursivité, l'exemple bato consiste à calculer x!
sachant que x! = x * (x-1)!
en général c élégant et ca simplifie le boulot à la programmation (mais pas forcement celui du cpu)

Reply

Sujets relatifs:

Leave a Replay

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