У меня есть структура с динамическим массивом внутри:
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;
все правильно передается по трубе, нет проблем. Я использую read
и write
в C:
write( STDOUT_FILENO, &x, sizeof( mystruct_t ) );
read( STDIN_FILENO, &x, sizeof( mystruct_t ) );