我有一个内部带有动态数组的结构:
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 ) );