Mmap probleme d allocation memoire d un tableau double entrée

Mmap probleme d allocation memoire d un tableau double entrée - C - Programmation

Marsh Posté le 11-06-2004 à 11:02:41    

Bonjour,
 

Code :
  1. //liste=(char **) malloc ( sizeof (char ) * 10 * 10);  
  2.    //liste[0]=(char *)malloc(10*sizeof(char));
  3.     liste=(char **)mmap(NULL,sizeof(char) * 10 * 10 ,PROT_READ|PROT_WRITE,MAP_SHARED,desc,0);   //partie qui ne fonctionne pas
  4.   //   liste[0]=(char *)mmap(NULL,TAILLE_NOM_CHANNEL*sizeof(char) ,PROT_READ|PROT_WRITE,MAP_SHARED,desc,0); //partie qui ne fonctionne pas
  5. if(fgets(liste[0],TAILLE_NOM_CHANNEL,stdin)==NULL)exit(EXIT_SUCCESS);
  6.    perror("mom erreur" );
  7.    printf("j ecris %s\n ",liste[0]);


 
j ai laisser des lignes en commentaires pour vous laisser imaginer toute les solutions que j ai imaginé.
 
Maintenant vla le probleme, j essaye d alloué de la memoire pour un tableau a double entrée grace à mmap, seulement ca ne parait pas vraiment possible. Quelqu un aurait un petit tips, merci d avance.
 
p.s: il me balance un segmentation fault


Message édité par spontex le 11-06-2004 à 11:08:05
Reply

Marsh Posté le 11-06-2004 à 11:02:41   

Reply

Marsh Posté le 11-06-2004 à 11:30:27    

pr allouer un tableau a double entree, il faut d abord allouer le tablo..puis boucler dessus pour allouer chaque case.. non ?

Reply

Marsh Posté le 11-06-2004 à 11:39:50    

normalement oui, mais justement c la mon probleme c que ca fonctionne pas avec mmap

Reply

Marsh Posté le 11-06-2004 à 20:42:12    

snif personne me répond, pourtant on m avais parler d un super Taz ;) qui savait tout sur tout, j ai du me tromper.

Reply

Marsh Posté le 11-06-2004 à 21:14:55    

ben tu veux que je te dises quoi ? pour sur que ça fonctionne, malloc est implémenté avec des mmap [:kadreg] alors
 
//liste=(char **) malloc ( sizeof (char ) * 10 * 10);  
     //liste[0]=(char *)malloc(10*sizeof(char));
 
 
déjà là, c'est 100 char que tu alloues, et pas 10 char* ... donc boom ... commence par faire marcher pour de vrai avec malloc

Reply

Marsh Posté le 11-06-2004 à 21:24:37    

les lignes en commentaires sont juste la pour se faire une idée de TOUT les essais que j ai pu faire. malheuresement, le mmap pour les tableaux a double entré n as pas l air de fonctionner comme les mallocs. car lorsque le mot est rentré dans liste[0] par fget, l adresse liste[0] n est plus valide, de la meme facon avec un strcpy.
D ailleurs un printf sur liste fonctionne.


Message édité par spontex le 11-06-2004 à 21:27:43
Reply

Marsh Posté le 11-06-2004 à 21:28:01    

ça ne marche déjà pas avec malloc alors commence par résoudre ce problème, ensuite on verra ...
 
surtout ça veut dire quoi « n as pas l air de fonctionner »

Reply

Marsh Posté le 11-06-2004 à 21:32:03    

d'ailleurs je comprends pas trop ce que tu veux faire en SHARED sur un fichier, d'ailleurs, la taille du fichier, comment est-elle ? quel intérête de multiplier les mmap plutot que d'en faire un seul avec un calcul d'adresse à la main ? l'intéret d'utiliser la même projection à 36 endroits ?

Reply

Marsh Posté le 11-06-2004 à 21:37:16    

Euh, avec les mallocs sa fonctionne sans probleme peut etre pas se qui sont en commentaires, mais j ai deja tester ca marche no prob.
le ca "n as l air de fonctionner" ben c'est j ai fais plusieur essai, un mmap unique, plusieur mmap different rien n y fais je perd toujours liste[0].
sinon le pkoi, ben tout simplement un projet de systeme, ou l on doit utiliser les semaphores, la memoire partagé et les files de messages.


Message édité par spontex le 11-06-2004 à 21:37:54
Reply

Marsh Posté le 11-06-2004 à 21:46:10    

et ça te fais rien de faire une projection en SHARED avec des pointeurs dedans et surtout de l'utiliser 36 fois pour être sur de pas savoir ce qu'il y a dedans ...

Reply

Marsh Posté le 11-06-2004 à 21:46:10   

Reply

Marsh Posté le 11-06-2004 à 22:15:17    

comment ca pour l utiliser 36 fois pour etre sur de pas savoir ce qu il y a dedans? je l utilise une seule fois pour mettre le "mot" a l interieur. tu ferais comment toi pour initialiser le tableau a deux dimensions avec le mmap, pour ensuite rentrer une chaine de charactere dans le premier tableau.

Reply

Marsh Posté le 11-06-2004 à 22:17:52    

en utilisant mmap correctement  
 
parce que fair des trucs du genre
 
liste = malloc( /* */);
liste[0] = liste
 
 
ça fait toujours du bien

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed