Je cherche à faire un IPC avec des segments de mémoire partagée dans C \ Linux.Segment de mémoire partagée 64 bits Problèmes C linux
je vais sur la création comme normale:
typedef struct {
int a[2];
} shm_segment;
...
shm_segment *shm;
int shm_id;
int shm_flags = IPC_CREAT | 0666
int shm_size = sizeof(struct shm_segment)
key_t key = 88899;
shm_id = shmget(key, shm_size, shm_flags); // ies this is in an if for error cheking but for example sake i omitted it
shm = (shm_segment*)shmat(shm_id, (void*)0, 0);
La dernière ligne est l'endroit où il se casse, à la compilation donne juste un:
Warning cast to pointer from integer of a different size.
De ce que j'ai fait avant que ce code fonctionne parfaitement sur les machines 32 bits (pas d'avertissement) (n'a pas testé exactement le même code, mais le même), mais sur mon 64 bits, il donne cet avertissement lors de la compilation.
Et à l'exécution, il se sépare. D'après les recherches que j'ai faites, je crois que la conversion d'un vide * à mon pointeur salit le pointeur, à cause de causes 64 bits.
Toute idée comment je peux réparer ce gars? Ou qu'est-ce qui le cause?
Pourquoi utiliser '(void *) 0' lorsque vous pouvez utiliser' null'? – Artelius