Bonjour à tous !
J'ai un soucis dans le cadre d'un portage d'une appli 32 bits en 64, en C, sur un AIX 5.3.
Le problème se situe au niveau d'un appel à shmat qui renvoie un pointeur nul. Ce qui est bizarre c'est que l'appel à shmat passe bien (i.e. il ne renvoie pas -1), et qui cela passe sans problème en 32 bits.
La mémoire est bien crée et je la vois bien en faisant un ipcs -m.
J'ai changé la clé par rapport à la version 32 bits, histoire d'être sûr de taper sur quelque chose de vierge, et avant chaque exécution je vérifie que tout va bien avec ipcs -m, quitte à supprimer les zones mémoire non supprimées du au plantage de l'essai précédent.
Bon, voila le bout de code qui ne va pas !
Voila, j'ai un peu tout essayé dans les options de ces deux fonctions... Si vous avez des idées je suis preneur !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 /* la création */ MemSize = size; /* Essai de création de mémoire partagée associée à 'key' */ if ((MemId = shmget(key, WRAPPER_MemSize, IPC_CREAT | S_IRUSR | S_IWUSR)) == -1) { printf("[WRAPPER_CreateSharedMemory] %d %s\n", WRAPPER_MemId, trerror(errno) ); return -1; } printf("[WRAPPER_CreateSharedMemory] mem ok %d\n", WRAPPER_MemId); /* la partie qui pose pb */ errno=0; MemAddr=&resmem; printf("MemAddr =%p\n", (void*)MemAddr); if ( (MemAddr = (char *) shmat(WRAPPER_MemId, 0, 0)) == BAD_ADDR) { Trace_log((char *)"Echec de connexion à la mémoire partagée\n",1); perror("shmat: "); printf("[AttachSharedMemory] Mem:%p\n",(void*)MemAddr); return NULL; } if (MemAddr == NULL) { perror("shmat"); printf("[AttachSharedMemory] SHMAT retour nul... : Mem:%x, %s\n", (void*)MemAddr, strerror(errno)); } else printf("[AttachSharedMemory] memoire ok\n");
J'ai beaucoup de mal à trouver de la doc sur ce cas qui n'est pas détaillé dans le man (ou dans la doc officielle IBM d'ailleurs).
Merci d'avance !
Partager