Я создаю буфер чтения и записи, используя shmget и shmat.Однако, когда я пишу сегмент записи, моя программа падает.Вот код -
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <sys/ipc.h>
#include <sys/shm.h>
void Cds_shminit(unsigned int key, unsigned int size, void* shmp)
{
int shmid;
shmid = shmget(key, size, 0644|IPC_CREAT);
if(shmid == -1){
printf("AICM_DEBUG(TCL Process):Error allocating shared memory...\n");
exit(-1);
}
/*if the shared memory assignment is successful, attach to the segment
and obtain a pointer*/
shmp = shmat(shmid, NULL, 0);
if(shmp == (void *) -1){
printf("AICM_DEBUG(TCL Process):Error attaching to shared memory....\n");
}
}
int main(void)
{
int shmid1,shmid2;
void *p;
void *q;
Cds_shminit(0x1234, 1024, p);
if(p==NULL){
printf("Null Ptr p\n");
}
int a = 0x51515151;
int *u;
u = (int *)p;
*u = a;
Cds_shminit(0x1234, 1024, q);
if(q==NULL){
printf("Null Ptr q\n");
}
printf("%x \n",*(int *)q);
printf ("%x %x\n",p,q);
while(1);
}
Наконец, я добавил проверку, чтобы увидеть, является ли p NULL и действительно ли этоМожет кто-нибудь помочь мне найти, что не так с этим кодом?Если бы я объявил указатели void глобально (void * p и void * q вне main ()).Я не могу их разыграть.Есть ли ограничение на приведение глобальных указателей на пустоту?