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

  FORUM HardWare.fr
  Programmation
  C++

  petit probleme de memoire!!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

petit probleme de memoire!!!

n°332634
wouschy
Posté le 13-03-2003 à 22:08:15  profilanswer
 

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.... ;)

mood
Publicité
Posté le 13-03-2003 à 22:08:15  profilanswer
 

n°332640
Taz
bisounours-codeur
Posté le 13-03-2003 à 22:13:25  profilanswer
 

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

n°332666
wouschy
Posté le 13-03-2003 à 22:45:20  profilanswer
 

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

n°332703
wouschy
Posté le 13-03-2003 à 23:23:09  profilanswer
 

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.

n°332715
gatorette
Posté le 13-03-2003 à 23:33:08  profilanswer
 

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
n°332733
wouschy
Posté le 13-03-2003 à 23:55:01  profilanswer
 

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. :)

n°332767
gatorette
Posté le 14-03-2003 à 01:41:30  profilanswer
 

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
n°332910
kadreg
profil: Utilisateur
Posté le 14-03-2003 à 08:46:03  profilanswer
 

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 !
n°333425
wouschy
Posté le 14-03-2003 à 14:20:01  profilanswer
 

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

n°333943
Deaddy
Posté le 15-03-2003 à 01:35:29  profilanswer
 

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)


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

  petit probleme de memoire!!!

 

Sujets relatifs
problème avec JTabbedPane [Résolu][HTML] Problème de marges (question conne)
et HTML probleme d'affichage tout conforum en PHP : problème de suivi des messages [résolu]
Probleme d'espaces dans un <input> et phpprobléme pour récupérer des emails
Problème d'en-tête avec la fonction mail()Problème d'images défilantes
Problème d'affichage avec &nbsp et modzilla dans routine phpRecherche de l'arrière petit fils
Plus de sujets relatifs à : petit probleme de memoire!!!


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