name[0]="name";
name[1]="age";
Это не строковая копия. Ну, не так, как вы, наверное, думаете.
Вы использовали малое пространство и присвоили ему имя [0] и имя [1], а затем пишете поверх этих указателей с указателями на буквенные строки «имя» и «возраст». Неверные массивы char [15] потеряны (утечка памяти).
Затем, когда вы пытаетесь отправить его с помощью MPI_Scatter, вы фактически отправляете то, на что указывает name
, то есть указатель, а не строки. (ниже -->
означает, что указывает)
name --> [0x4321, 0x2348]
0x4321 --> "name"
0x2348 --> "age"
Но вы рассеиваете (хотя бы часть) [0x4321, 0x2348]
, а может и больше.
Я раньше не использовал библиотеку MPI (что я помню), но я подозреваю, что другие ваши аргументы MPI_Scatter также неверны из-за неправильного понимания строк (массивов символов) и указателей.
Я думаю, что если вы сделали:
char name[2][15] = {"name", "age"};
и забыл о вашем malloc в разбросанной части кода, вам было бы легче, хотя много-много раз попытки использования массивов 2d C вас также запутают. Многие вопросы здесь связаны с тем, что люди неправильно понимают разницу между массивами указателей на массивы и двумерными массивами.