|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Allocation memoire : malloc ou pas malloc dans ce cas ci ... [ Divers / Débutant(e) ] (AsM0DeUz)
Informations & options pour cette discussion
vendredi 23 mars 2007 à 10:30:40 |
Allocation memoire : malloc ou pas malloc dans ce cas ci ...

AsM0DeUz
|
Bonjour,
Je voudrais remplir un tableau avec le contenu d'un fichier texte avec le code ci-dessous :
#define MaxBoardSize 10
int main() { char board[MaxBoardSize][MaxBoardSize];
initboard(board[MaxBoardSize]); }
void initboard(char *bd[MaxBoardSize]) { FILE *fp; char *fl = &boardfile char *CurLine=malloc(MaxBoardSize*(sizeof(int))); int i=0;
fp=fopen(fl, "r"); if(fp==NULL) { fprintf(stderr, "The board file does'nt exist\n"); exit(EXIT_FAILURE); } while(fgets(CurLine,MaxBoardSize+1,fp)!=NULL) { strncpy(bd[i],CurLine,MaxBoardSize); i++; } }
Je me demande si la definition du tableau qui est soulignée réserve la memoire ou bien je dois faire un malloc ? parce que quand j'execute ca plante avec un probleme de memoire : The system DLL kernel32.dll was relocated in memory. The application will not run properly ...
Merci d'avance
|
|
|
vendredi 23 mars 2007 à 11:03:51 |
Re : Allocation memoire : malloc ou pas malloc dans ce cas ci ...

KeniiyK
|
nt main() { char board[MaxBoardSize][MaxBoardSize];
initboard((char*)board); }
void initboard(char *bd) { FILE * fp=fopen(&boardfile, "rt"); while(fgets(bd,MaxBoardSize,fp)!=NULL) { bd += MaxBoardSize; } }
Essaye avec ça, mais cela dépend de ton fichier en entrée..
:D
|
|
|
vendredi 23 mars 2007 à 11:04:27 |
Re : Allocation memoire : malloc ou pas malloc dans ce cas ci ...

KeniiyK
|
Et pardon, pas besoin du malloc.
:D
|
|
|
vendredi 23 mars 2007 à 11:30:33 |
Re : Allocation memoire : malloc ou pas malloc dans ce cas ci ...

BruNews
|
Fermeture du fichier ???
ciao... BruNews, MVP VC++
|
|
|
vendredi 23 mars 2007 à 11:32:42 |
Re : Allocation memoire : malloc ou pas malloc dans ce cas ci ...

AsM0DeUz
|
initboard((char*)board);
}
void initboard(char *bd)
{
FILE * fp=fopen(&boardfile, "rt");
while(fgets(bd,MaxBoardSize,fp)!=NULL)
{
bd += MaxBoardSize;
}
}
C'est sur c'est plus court :)
Mais ca initboard((char*)board) :
- Pq tu mets (char *)board et pas char * board ?
- Qd on a un tableau a 2 dimensions, il faut passer au moins une des dimensions a la fonction non ? void initboard(void initboard(char *bd[MaxBoardSize]) ou void initboard(char *bd, int height, int width) par exemple ? non ?
- bd += MaxBoardSize; qd tu fais ca, t'es sur que chaque ligne du tableau est contigue en memoire ?
Merci
|
|
|
vendredi 23 mars 2007 à 11:41:53 |
Re : Allocation memoire : malloc ou pas malloc dans ce cas ci ...
|
vendredi 23 mars 2007 à 11:45:42 |
Re : Allocation memoire : malloc ou pas malloc dans ce cas ci ...

KeniiyK
|
Ben justement, ca marche dans cet exemple car ton allocation est contigue (char board[MaxBoardSize][MaxBoardSize]; -> equivalent a char board[MaxBoardSize * MaxBoardSize];
- Pq tu mets (char *)board et pas char * board ? (char *)board -> cast char** en char*
- Qd on a un tableau a 2 dimensions, il faut passer au moins une des
dimensions a la fonction non ? void initboard(void initboard(char
*bd[MaxBoardSize]) ou void initboard(char *bd, int height, int width)
par exemple ? non ? Le problème n'est pas le nombre de dimension mais l'accès a tes données, si elles sont contigues, il suffit de connaitre l'adresse du premier element. Si pas contigu, tu ne peut pas faire bd += MaxBoardSize; mais bd[i++] (en gros...)
:D
|
|
|
vendredi 23 mars 2007 à 12:17:47 |
Re : Allocation memoire : malloc ou pas malloc dans ce cas ci ...

AsM0DeUz
|
Ouchhhh ca plante sans aucun resultat, j'ai 2 warnings :
[i]warning: passing arg 1 of `fopen' from incompatible pointer[/i]
[i]warning: passing arg 1 of `fclose' from incompatible pointer type[/i]
#define boardfile "board.txt"
int main()
{
char board[MaxBoardSize][MaxBoardSize];
initboard((char*)board);
return 0;
}
void initboard(char *bd)
{
FILE *fp=fopen(&boardfile, "rt");
if(fp==NULL)
{
fprintf(stderr, "The board file does'nt exist\n");
exit(EXIT_FAILURE);
}
while(fgets(bd,MaxBoardSize,fp)!=NULL)
{
bd += MaxBoardSize;
}
fclose(&boardfile);
}
Le contenu de board.txt :
0000000000
0000000000
0000000000
0000000000
0099009900
0099009900
0000000000
0000000000
0000000000
0000000000
|
|
|
vendredi 23 mars 2007 à 12:20:23 |
Re : Allocation memoire : malloc ou pas malloc dans ce cas ci ...

KeniiyK
|
Evidement : #define boardfile "board.txt" -> boardfile n'est pas une variable donc pas d'adresse
fopen(boardfile, "rt"); fclose(boardfile);
:D
|
|
|
vendredi 23 mars 2007 à 12:29:58 |
Re : Allocation memoire : malloc ou pas malloc dans ce cas ci ...

AsM0DeUz
|
effectivement plus de warning ... ni d'erreur mais ca marche pô ... enfin ca plante windows ...
|
|
|
Cette discussion est classé dans : char, memoire, fp, malloc, maxboardsize
Répondre à ce message
Sujets en rapport avec ce message
Chaine de Char et Memoire ! [ par Soft ]
Bonjour,Qq1 connait il un moyen pour charger le contenu d'un fichier (pouvant atteindre plusieurs dizaines de MO) dans un char *buffer;Car meme avec u
Probleme malloc [ par zzzzzz ]
<img src=/imgs2
Pointer directement vers la memoire video (probleme de cast) [ par Darkneon ]
Salut, J'essais de declarer mon pointeur vers la memoire video comme suitchar *screen = (char *)0xA0000000L;mais ca me donne le message d'erreur suiv
Pointeur et liberation de memoire [ par Darkneon ]
Salut, J'avais un probleme apres que je liberais de la memoire allouer a un pointeur, le message "Null pointer assignment" m'apparaisait toujours. Le
fonction malloc [ par Trollien ]
Salut,j'aurai une question concernant le fonctionnement de l'allocation de memoire en c.Si j'alloue de la memoire avec la fonction malloc(...), est ce
petite question concernant malloc et free... [ par kod32 ]
Salut,je me pose une question depuis un petit moment et je pense que vous avez la réponse...Quand on alloue quelques octets via malloc, si on évite l'
pionteur [ par lilington ]
Salut j'ai un petit problème avec l'allocation dinamique sur VC++ 6je cherche la correspondance entre "malloc" et "new"voilà la l'allocation que je ve
pb malloc [ par youpiyoyo ]
d'apres msdn char *string; /* Allocate space for a path name */ string = malloc( _MAX_PATH );deja ca chez moi ca compil pas me compilo me di impos
malloc en c et utilisation memoire sous win [ par stephanieL ]
mon appli en c a une utilisation memoire (dans le gestionnaire de tache) qui augmente tout le temps. Mon appli est essentiellement une boucle sur une
langage c [ par trinity666 ]
bonjour 1)je ne comprend pas pourquoi ma fonction atobm ne compile pas; le compilateur dit kil ya 1 erreur ds while((c=fgetc(fp))!=EOF)){ mais je vois
Livres en rapport
|
|