小编Nid*_*edi的帖子

将字符串数组附加到共享内存 - 分段错误

我试图将一个字符串数组附加到C中的共享内存.我已尽力将字符串数组(array1和数组2)附加到共享内存中.

这里,array1和array2是宽度为20个字符和大小为5的字符串数组(如何指定附件中的字符串对我来说也不是很清楚).此外,a和b分别是1-D整数和浮点数组,大小为5.

我想通过在运行时更新它们的值来改变字符串数组的状态,正如我所做的那样.

#include <stdio.h>
#include <stdlib.h>
#include<sys/shm.h>
#define NUMBER_OF_DATA  5
int main()
{
   int size=(NUMBER_OF_DATA*(sizeof(int)+sizeof(float))) + (2*(20*NUMBER_OF_DATA));
   key_t key;
   key=ftok("/home/android/Desktop/newww.c",4);
   int shmid=shmget(key,size,0777|IPC_CREAT);

   int *a=(int *)shmat(shmid,0,0);
   float *b=(float *)(a+NUMBER_OF_DATA);
   char **array1=(char **)(b+NUMBER_OF_DATA);
   char **array2=(char **)(array1+(20*NUMBER_OF_DATA));
   int i;
   for(i=0;i<5;i++)
   {
       printf("enter value\n");
       scanf("%s",array1[i]);
   }
   shmdt(&shmid);
   shmctl(shmid,IPC_RMID,0);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的其他过程执行以下操作

int shmid=shmget(key,size,0777|IPC_CREAT);


 int *a1=(int *)shmat(shmid,0,0);
  float *b1=(float *)(a1+NUMBER_OF_DATA);
  char **array11=(char **)(b1+NUMBER_OF_DATA);
  char **array22=(char **)((char *)array11+(20*NUMBER_OF_DATA));
  for(i=0;i<NUMBER_OF_DATA;i++)
    {
      a1[i]=aaa[i];
      b1[i]=bbb[i];
      array11[i]=array111[i];
      array22[i]=array2222[i];
    }
Run Code Online (Sandbox Code Playgroud)

其中aaa,bbb,array111和array222是其他数组,通过此过程从中将值加载到共享内存中.这两个过程无法帮助我实现我想要的目标.

如果有人能够指出原因并告诉我将字符串数组附加到内存的正确方法,那将是很棒的.谢谢.

c arrays shared-memory

1
推荐指数
1
解决办法
1972
查看次数

标签 统计

arrays ×1

c ×1

shared-memory ×1