Я пытаюсь передать массив слов. Точнее, я пытаюсь передать словарь (hash_map {string, int}), но, конечно, я не могу сделать это простым способом. Поэтому я храню все ключи и все значения в двух отдельных массивах (cfKeys и cfValues). MAX_CF_LENGTH - максимальное количество символов ключа.
Вот фрагмент кода:
char **cfKeys; // this contains all cf keys in the dataset
int *cfValues; // this contains all cf values in the dataset
int num_cf;
[... некоторая предварительная обработка ...]
if(myrank == 0) num_cf = cfDictionary.size(); // this is an hardcoded dictionary in a separate header file
MPI_Bcast(&num_cf, 1, MPI_INT, 0, MPI_COMM_WORLD);
cfValues = new int[num_cf];
cfKeys = new char *[num_cf];
for (int i = 0; i < num_cf; i++)
cfKeys[i] = new char[MAX_CF_LENGTH];
if (myrank == 0)
{
int i = 0;
for (auto cf : cfDictionary)
{
strncpy(cfKeys[i], cf.first.c_str(), MAX_CF_LENGTH);
cfValues[i] = cf.second;
i++;
}
}
MPI_Bcast(cfValues, num_cf, MPI_INT, 0, MPI_COMM_WORLD); // no problem here
MPI_Bcast(cfKeys, num_cf * MAX_CF_LENGTH, MPI_CHAR, 0, MPI_COMM_WORLD); // seg. fault here
Помимо ошибки, если вы думаете, что есть лучший способ реализовать эту диктонную передачу, пожалуйста, не стесняйтесь посоветовать мне :) Комментарий, если вам нужно больше информации / фрагментов кода. Заранее спасибо.