Как было сказано в другом ответе, поскольку coordArray
было выделено в вашей функции, оно выйдет из области видимости всякий раз, когда ваша программа выйдет из этой функции, поэтому значения, указанные указателем, больше не будут правильными.
Если вам нужно несколько раз вызвать эту функцию и избежать утечек памяти из malloc
, вы можете объявить float coordArray[3]
как глобальную переменную, обновив ее в вашей функции result
, которая затем будет void
функцией .
Что-то вроде
//global declaration
float coordArray[3]
/*
Setup and other code
*/
void result (float x, float y, float z)
{
coordArray[0] = x;
coordArray[1] = y;
coordArray[2] = z;
}
Таким образом, вы избежите своей ошибки.
Примечание: глобальные переменные обычно считаются не чистыми в C / C ++, однако для встроенных систем с низкими требованиями к памяти и в тех случаях, когда утечка памяти будет иметь очень быстрые последствия, обычно рекомендуется не использовать динамическое распределение.
Надеюсь, это поможет!
** РЕДАКТИРОВАТЬ **
Поскольку ваш результат void
, вам не следует присваивать его возвращаемое значение чему-либо, оно ничего не возвращает. Просто позвонив по номеру result(yaw, pitch, roll);
, вы обновите coordArray
.
Чтобы преобразовать этот массив в строку, вы должны сделать это последовательно, поскольку dtostrf
ожидает double
, и у вас есть несколько из них:
for (unsigned int i=0; i<3;i++){
char tamp[4];
dtostrf(coordArray[i], 1, 3, tamp); //convert one of your coordinates
for (unsigned int j=0;j<3;j++) txStringYaw[4*i+j] = tamp[j]; //concatenate it inside txStringYaw
}
Я не проверял это, однако, может быть небольшая синтаксическая ошибка.
Примечание: я не знаю, правильно ли я понял вашу проблему, но в моем коде txStringYaw
будет содержать ваши три координаты. Вы можете легко адаптировать его, чтобы иметь только Yaw, если хотите!