Mémoire partagée et pointeur

Utilisateur anonyme - 9 juil. 2003 à 11:37
 Utilisateur anonyme - 9 juil. 2003 à 16:22
Bonjour,

J'essai de faire passer un tableau dynamique, un pointeur donc, d'un programme à un autre, l'adresse est bien passée et les champs non dynamique de la struct aussi (int et compagnie), mais le programme qui la reçoit n'arrive pas à accéder aux éléments du tableau.

J'ai tout de suite pensé que l'adresse du tableau dynamique était relative à la zone mémoire du programme qui avait créé le tableau (j'ai testé avec un "new" mais aussi avec un "int tabX[2]; tab = tabX;" mais c'est pareil évidemment) et que c'est pour ça que le second ne trouvait rien à l'adresse indiqué, y'a-t-il un moyen de faire pointer le second où il faut ? (par exemple en récupérant l'adresse de début de la zone mémoire du 1er programme et en l'ajoutant à l'adresse du tableau)

Je ne suis pas sûr de m'être bien expliqué.
Si ce n'est pas possible ça va m'obliger à placer des tableaux de grosse taille dans la struct, ça m'embêterait beaucoup :(

7 réponses

cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
9 juil. 2003 à 11:57
Si tu es sous Win32, utilise le File Mapping. Cela te permettra d'avoir une zone mémoire allouée par le système et nommée, c'est-à-dire que tu pourrais y accéder à partir de n programmes.

Kaid - kaid.fr.st
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 juil. 2003 à 12:00
Pour une fois chapeau, question bien posee et tres claire.
Effectivement tu ne passeras pas une adresse memoire d'un processus a un autre car elle sera toujours invalide.
Ici ta solution sera un CreateFileMapping (voir dans MSDN) avec nom ou dans le fichier d'echange du systeme et place les donnees dedans, l'autre processus pourra les lire et modifier si besoin.
BruNews, ciao...
0
Utilisateur anonyme
9 juil. 2003 à 13:08
héhé, je me doutais que tu répondrais, j'ai en effet utilisé le programme sur ton site qui se sert du File Mapping mais ça ne marche pas snif.

Du côté serveur ça passe bien, le remplissage est ok, la lecture aussi, mais côté client ça passe moins bien, toujours un nombre qui n'a rien à voir avec le remplissage.

Au moins ça me rassure qu'on me dise d'utiliser ça, ça veut dire que c'est juste que je m'y prends mal :).
0
Utilisateur anonyme
9 juil. 2003 à 13:11
Merci pour la question bien posée :)

Comme je dis à Kaid, je passe par un FileMapping (j'ai modifié son programme client/serveur). Mais tout ce qui est allocation dynamique (new, int* =, templates) donne le même résultat.
J'ai cherché sur pas mal de forums, je n'ai croisé que des "échanges" de structures statiques.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
9 juil. 2003 à 13:15
Mais les autres valeurs sont t'elles exactes ? Si une seule valeur est erronée, cela ne doit pas être grand chose. Attention toute fois à la syncro entre le serveur et le client, tu peux utiliser un événement nommé, quand le serveur a terminé le remplissage pour le signifier au client.

Kaid - kaid.fr.st
0
Utilisateur anonyme
9 juil. 2003 à 13:20
Les entiers (int entier1; int entier2) sont oks, pour le tableau d'entiers (int* tab1) l'adresse est la même, mais quand je lis tab1[i] les valeurs sont inexactes (d'ailleurs sur un tableau de 2 éléments j'ai toujours la même valeurs dans les 2 "cases").

Pour la synchro je n'en ai pas fait, je lance le serveur et une fois les instructions de remplissage terminées je lance le client.
0
Utilisateur anonyme
9 juil. 2003 à 16:22
Les variables créées dynamiquement attérissent dans la pile du processus qui les crée, c'est-à-dire que l'adresse est effectivement relative au processus.

Le problème a été réglé, pour l'instant ce n'est pas formulé à l'écrit mais la méthode est arrêté, elle marche et n'est pas une usine à gaz (bien :), j'essaierai de mettre la source ici après nettoyage des fonctions liées au projet d'ici quelques mois au plus.
0
Rejoignez-nous