Странное поведение с пустыми указателями, возвращенными из SHMAT - PullRequest
0 голосов
/ 03 мая 2019

Я создаю буфер чтения и записи, используя 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 ()).Я не могу их разыграть.Есть ли ограничение на приведение глобальных указателей на пустоту?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...