gpt4 book ai didi

c - 分配连续序列不起作用

转载 作者:行者123 更新时间:2023-11-30 17:55:05 24 4
gpt4 key购买 nike

我正在使用共享内存,因此我需要将内存的某些部分附加到其他进程。我试图附加到一个连续的序列,但这似乎在整数和 float 组之后不起作用。这里 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之后不连续。为什么会这样呢?解决办法是什么?

最佳答案

您仅初始化了 array1array2 的第一个字段,其余字段未初始化。你似乎混淆了一些东西,但我不确定你的确切意图是什么。

如果您希望两个数组都是 char *,很简单,就像处理整数和 float 一样。

但是,如果您确实想要像 char*[] 这样的东西,则不仅需要存储值,还需要存储指向共享内存段中的值的指针。

关于c - 分配连续序列不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14536943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com