문제

C Linux에서 공유 메모리 세그먼트가 포함 된 IPC를 찾고 있습니다.

나는 그것을 정상처럼 만들어 낸다 :

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);

마지막 줄은 파손되는 곳입니다. Compile에서는 단지 다음을 제공합니다.

Warning cast to pointer from integer of a different size.

이 코드 앞에서 수행 한 작업 에서이 코드는 32 비트 머신 (경고 없음)에서 완벽하게 작동하지만 (정확히 동일한 코드를 테스트하지는 않았지만 동일) 64 비트에서는 컴파일 에이 경고를 제공합니다.

그리고 실행 중에도 segfaults. 내가 한 연구에서 나는 빈 공간*에서 포인터에 이르기까지 64 비트의 원인에서 포인터를 엉망으로 만듭니다.

내가이 사람들을 어떻게 고칠 수 있습니까? 아니면 원인은 무엇입니까?

도움이 되었습니까?

해결책

올바른 선언이없는 것 같습니다 shmat(), 컴파일러가 반환한다고 가정합니다 int.

당신이 가지고 있는지 확인하십시오

#include <sys/shm.h>

당신의 포함.

다른 팁

캐스트를 제거하고 적절한 헤더를 포함하십시오.

#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top