Erreur mémoire pour un décompte

cs_yeager Messages postés 12 Date d'inscription jeudi 19 octobre 2000 Statut Membre Dernière intervention 13 avril 2003 - 6 janv. 2003 à 09:48
cs_yeager Messages postés 12 Date d'inscription jeudi 19 octobre 2000 Statut Membre Dernière intervention 13 avril 2003 - 6 janv. 2003 à 10:58
Bonjour

j'ai fait un petit code pour lancer un programme toutes les 30 secondes.
Lorsque je lance le débugger, ça marche nichel.
Mais lorsque je lance le programme tout seul ça merde.
C'est une fonction récurcive qui pour l'instant est censée me dire quand les 30 secondes sont écoulées.

merci de votre aide

yeager

#include <stdio.h>
#include <winsock2.h>
#include <conio.h>
#include <time.h>

void test_fonction_temps()
{
time_t instant_initial = 0;

instant_initial = time (NULL);

if (instant_initial == ((time_t) - 1))
{
fprintf(stdout,"erreur d'horloge");
}
else
{
fct_temps(instant_initial);
}
}

void fct_temps(time_t instant_initial)
{
char saisie = 0;
time_t instant_final;
double ecart=0;

instant_final = time (NULL);

if (instant_final == ((time_t) - 1))
{
fprintf(stdout,"erreur d'horloge");
getch();
}
else
{
ecart = difftime(instant_final,instant_initial);
if (ecart >= 30)
{
fprintf(stdout,"cela fait trentes secondes");
getch();
}
else
{
fct_temps(instant_initial);
}
}

}

void test_fonction_temps()
{
time_t instant_initial = 0;

instant_initial = time (NULL);

if (instant_initial == ((time_t) - 1))
{
fprintf(stdout,"erreur d'horloge");
}
else
{
fct_temps(instant_initial);
}
}

void main()
{
test_fonction_temps();
}

2 réponses

jcecchi Messages postés 117 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 14 janvier 2003 3
6 janv. 2003 à 10:25
Salut,

Le classique probleme des fonctions recursives : le depassement de memoire.
A chaque appel tu crees 2 time_t, 1 char et 1 double.
En 30s la fonction est tres tres tres souvent sollicite, il arrive donc un moment ou t'as plus assez de memoire et pouf le programme.
A moins qu'il soit imperatif pour toi de faire de cette maniere, utilise plutot une boucle while.

Je sais pas si c'est une erreur de copier/coller mais il y a deux fois la fonction test_fonction_temp().
0
cs_yeager Messages postés 12 Date d'inscription jeudi 19 octobre 2000 Statut Membre Dernière intervention 13 avril 2003 1
6 janv. 2003 à 10:58
merci pour ton aide
Je dois impérativement utiliser la récursivité.
J'ai déclaré ecart et instant final dans test_fonction_temps en même temps que instant_initiale. J'ai viré la variable saisie qui me sert à rien pour l'instant.
J'ai toujours une erreur mémoire, mais en effet je pense que j'avais fait une grosse connerie en déclarant ainsi ecart et instant_final.
Merci

a+
0
Rejoignez-nous