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)

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

Membre Club
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

Membre Club
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

Administrateur CodeS-SourceS
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 ...

AsM0DeUz

excellente idee :)

vendredi 23 mars 2007 à 11:45:42 | Re : Allocation memoire : malloc ou pas malloc dans ce cas ci ...

KeniiyK

Membre Club
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

Membre Club
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


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.