gpt4 book ai didi

c - 通过 C 中的管道使用动态数组写入和读取结构

转载 作者:行者123 更新时间:2023-12-02 00:41:08 25 4
gpt4 key购买 nike

我有一个内部有动态数组的结构:

struct mystruct {
int count;
int *arr;
} mystruct_t;

我想将此结构传递到 C 中的管道并绕过一圈进程。当我更改每个进程中的计数值时,它会被正确更改。我的问题是动态数组。

我正在这样分配数组:

mystruct_t x;
x.arr = malloc( howManyItemsDoINeedToStore * sizeof( int ) );

每个进程都应该从管道中读取,对该数组做一些事情,然后将它写入另一个管道。戒指设置正确;那里没有问题。我的问题是,除第一个进程外,所有进程都没有获得正确的数组副本。我在第一个过程中将所有值初始化为 10;但是,它们在后续的中都显示为 0。

for( j = 0; j < howManyItemsDoINeedToStore; j++ ){
x.arr[j] = 10;
}

日志:

Initally:       10      10      10      10      10
After Proc 1: 9 10 10 10 15
After Proc 2: 0 0 0 0 0
After Proc 3: 0 0 0 0 0
After Proc 4: 0 0 0 0 0
After Proc 5: 0 0 0 0 0
After Proc 1: 9 10 10 10 15
After Proc 2: 0 0 0 0 0
After Proc 3: 0 0 0 0 0
After Proc 4: 0 0 0 0 0
After Proc 5: 0 0 0 0 0

现在,如果我将我的代码更改为,比如说,

struct mystruct {
int count;
int arr[10];
} mystruct_t;

一切都正确地通过管道,没问题。我在 C 中使用 readwrite:

write( STDOUT_FILENO, &x, sizeof( mystruct_t ) );
read( STDIN_FILENO, &x, sizeof( mystruct_t ) );

最佳答案

当您分配动态数组时,malloc 函数会返回一个指向不在您的结构中的内存空间的指针。看看这个例子:

0x0000000F int count
0x00000014 >> pointer to your array elsewhere 0x000000F0


0x000000F0 your array is here

您可以用众所周知的数据填充您的结构来演示它。

struct mystruct{
int count;
int *arr;
char pad [5];
}mystruct_t;
mystruct_t x;
x.pad={0x5b,0x5C,0x5D,0x5E,0x5F};

关于c - 通过 C 中的管道使用动态数组写入和读取结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2505504/

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