我有一个结构体,里面包含一个动态数组:
struct mystruct {
int count;
int *arr;
} mystruct_t;
我希望能够在C语言中通过管道将该结构体传递,并在进程环上循环。当我在每个进程中更改count的值时,它被正确地更改。我的问题出现在动态数组中。
我是这样分配数组的:
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语言中的read
和write
函数:
write( STDOUT_FILENO, &x, sizeof( mystruct_t ) );
read( STDIN_FILENO, &x, sizeof( mystruct_t ) );