AsM0DeUz
Messages postés19Date d'inscriptionjeudi 17 août 2006StatutMembreDernière intervention 4 février 2009
-
23 janv. 2007 à 14:09
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
24 janv. 2007 à 10:21
'lut
Je m'initie actuellement au C. Apres avoir fait les exos les plus basiques ... je passe au basique niveau 2
J'ai ecris qques lignes pour afficher le contenu d'un fichier texte (qui fonctionne :)) :
if (argc <= 1)
{
printf("what file to open ?");
return 0;
}
pfilename=argv[1];
pfiletxt=fopen(pfilename,"r");
if (pfiletxt !=NULL)
{
while (fgets(buffer, LineMaxSize, pfiletxt) != NULL)
{
printf("%s",buffer);
}
}
else printf ("File does not exist");
return 0;
}
Seulement dés que je modifie mon prog pour mettre la partie lecture de fichier sous forme de fonction, il plante lamentablement et j'arrive pas a trouver pq :( Il plante la ligne surlignee ci-dessous.
#include <stdio.h>
#define LineMaxSize 80
int OpenBoardFile(char *pFileName);
int initboard(char *pTab, int TabSize, FILE *pBoardFile);
int main(int argc, char *argv[])
{
if (argc <= 1)
{
printf("what file to open ?");
return 0;
}
OpenBoardFile(argv[1]);
}
int OpenBoardFile(char *pFileName)
{
FILE *pFileTxt;
char *CurLine;
pFileTxt=fopen(pFileName,"r");
if (pFileTxt != NULL)
{
printf("Test");
while (fgets(CurLine, LineMaxSize, pFileTxt) !=NULL)
printf("%s", CurLine);
}
else printf ("File does not exist");
return 0;
}
Je suppose que ca doit etre un probleme de pointeur mais quoi ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 23 janv. 2007 à 21:02
Indique seulement que dans le 1er cas, tu avais tout lr reste d'un segment libre sous ta variable alors que dans la fonction tu écrases direct EIP et le reste.
Dans tous les cas, faire toujours pointer un pointeur sur un buffer valide.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 24 janv. 2007 à 10:21
Tout ce qui est alloué dynamiquement (malloc(), new, VirtualAlloc(), etc...) doit être libéré avec la fonction ou l'opérateur correspondant au mode d'allocation.
AsM0DeUz
Messages postés19Date d'inscriptionjeudi 17 août 2006StatutMembreDernière intervention 4 février 2009 23 janv. 2007 à 20:32
Ce que je ne comprends pas, c'est pq la premiere version (celle sans la fonction) marche alors que je ne fais pas d'allocation non plus et pas la seconde qui me donne une erreur