begin process at 2012 02 11 10:50:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Allocation memoire : malloc ou pas malloc dans ce cas ci ...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Allocation memoire : malloc ou pas malloc dans ce cas ci ...

vendredi 23 mars 2007 à 10:30:40 | Allocation memoire : malloc ou pas malloc dans ce cas ci ...

AsM0DeUz

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

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

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

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

Membre Club
effectivement plus de warning ... ni d'erreur mais ca marche pô ... enfin ca plante windows ...


Cette discussion est classée 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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,310 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales