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 !

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");
Voila, j'ai un peu tout essayé dans les options de ces deux fonctions... Si vous avez des idées je suis preneur !
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 !