3

内部に動的配列を持つ構造体があります。

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でreadandを使用しています:write

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

3 に答える 3