Erreur sur TURBO C "NOT ENOUGH MEMORY"

eliramomo Messages postés 14 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 22 septembre 2010 - 13 sept. 2010 à 17:40
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 3 oct. 2010 à 16:40
Bonjour tout le monde,
j'aimerai que vous m'aidiez a propos d'une erreure que je recois lors de l'execution a partir de turbo C
ça s'affiche NOT ENOUGH MEMORY et voici le code:
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<math.h>
#include<string.h>
#include<dir.h>

void main()
{
struct ffblk ffblk;
int done=0;
FILE *f_call;
char *s;
int mois=0,i,e,som;
long tab[1000][12]={0};

clrscr();

done=findfirst("*.txt",&ffblk,0);
while(done==0)
{
if(mois==12)
mois=1;
else
mois++;

f_call=fopen(ffblk.ff_name,"r");

while(!feof(f_call))
{
fscanf(f_call,"%s",s);
for(i=0;i<100&&i<strlen(s);i++)
if(s[i]=='E')
if(s[i+1]=='R')
if(s[i+2]=='O')
{
som=(s[i+3]-'0')*100+(s[i+4]-'0')*10+(s[i+5]-'0');
tab[som][mois]=tab[som][mois]+1;
}

}
for(i=0;i<1000;i++)
if(tab[i]!=0)
{
printf("%d\t%ld\n",i,tab[i]);
}
getch();
clrscr();
done=findnext(&ffblk);
}
fclose(f_call);
getch();
}


UN GRAND MERCI D'AVANCE
mohamed

3 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
13 sept. 2010 à 19:35
Code illisible, poste sur Pastebinet passe-nous un lien.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
nanonavich Messages postés 54 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 15 août 2015
16 sept. 2010 à 01:34
som=(s[i+3]-'0')*100+(s[i+4]-'0')*10+(s[i+5]-'0');
tab[som][mois]=tab[som][mois]+1;


sois sure que som depasse pas 1000

je ferais genre
if(som<1000) tab[som][mois]=tab[som][mois]+1;


char *s;

quel est la grosseur de s en principe on l utulise comme pointeur

fscanf(f_call,"%s",s);
for(i=0;i<100&&i<strlen(s);i++)
if(s[i]=='E')
if(s[i+1]=='R')
if(s[i+2]=='O')

char s[101];
fscanf(f_call,"%s",s);
for(i=0;i<100&&i<strlen(s);i++)
if(s[i]=='E')
if(s[i+1]=='R')
if(s[i+2]=='O')
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
3 oct. 2010 à 16:40
Salut,

Dans ton premier code, ton utilisation de s est effectivement incorrecte. Tu passes en paramètre de fscanf un pointeur non initialisé qui peut pointer sur tout et n'importe quoi.

Utiliser une taille de 100 est aussi arbitraire et dangereuse, sauf si tu es parfaitement sûr que la structure de ton fichier fera que fscanf ne lira jamais plus de 100 caractères.

Comme expliqué dans certaines de tes précédentes question, il faudrait mieux charger le fichier complet en mémoire puis de travailler sur le tableau chargé.
Regarde ce genre de code. Il propose par exemple une fonction pour charger un fichier en mémoire (Si le fichier n'est pas trop gros, inférieur à quelques 100 de Mo par exemple).
0
Rejoignez-nous