簡體   English   中英

分配連續序列不起作用

[英]Allocating a contiguous sequence not working

我正在使用共享內存,因此需要將內存的一部分附加到其他進程。 我試圖附加到一個連續的序列,但這似乎在整數和浮點數組之后不起作用。 在這里NUMBER_OF_DATA = 5

int shmid=shmget(key,size,0777|IPC_CREAT);
  int *a=(int *)shmat(shmid,0,0);
  float *b=(float *)(a+NUMBER_OF_DATA);
  char *array1[20];
array1[0]=(char *)(b+NUMBER_OF_DATA);
  char *array2[20];
array2[0]=(char *)(array1+(20*NUMBER_OF_DATA));
  for(i=0;i<NUMBER_OF_DATA;i++)
    {
      a[i]=roll_no[i];
      b[i]=cgpa[i];
      array1[i]=firstname[i];
      array2[i]=lastname[i];
    printf("%p %p %p %p\n",&a[i],&b[i],&array1[i],&array2[i]);
    }

當我打印地址時,我得到

0xb777d000 0xb777d014 0xbfd480a0 0xbfd480f0
0xb777d004 0xb777d018 0xbfd480a4 0xbfd480f4
0xb777d008 0xb777d01c 0xbfd480a8 0xbfd480f8
0xb777d00c 0xb777d020 0xbfd480ac 0xbfd480fc
0xb777d010 0xb777d024 0xbfd480b0 0xbfd48100

在數組a和b之后不連續。 為什么會這樣呢? 解決辦法是什么?

好像是這樣

  array1[i]=firstname[i];
  array2[i]=lastname[i];

您正在覆蓋array[i]值,因此它不再像以前那樣是指向共享內存某部分的指針

array1[0]=(char *)(b+NUMBER_OF_DATA);
array2[0]=(char *)(array1+(20*NUMBER_OF_DATA));

在輸出的最后兩列中,您實際上是在打印firstname[i]的值,而不是(char *)(b+NUMBER_OF_DATA) 如果不是故意的,那就是答案。 如果不是這樣,那么知道此firstnamelastname變量的含義將有助於我們給出更好的答案。

UPD:還請注意,當i≥0時,您正在打印array1和array2的未初始化項。

您只初始化array1array2的第一個字段,其余未初始化。 您似乎有些困惑,但是我不確定您的確切意圖是什么。

如果要將兩個數組都設為char * s,這很簡單,就像對int和float一樣。

但是,如果您確實想要像char*[]類的東西,則不僅需要存儲值,還需要在共享內存段中存儲指向這些值的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM