Я пытаюсь преобразовать массив чисел с плавающей точкой в вектор glm во вспомогательной функции.К сожалению, возвращаемое значение искажено:
arr: 1, 1, 0
fn.arr: 1, 1, 0
fn.vec: 1, 1, 0
vec: 4.7468e-11, 4.55856e-41, 1
Я ожидаю, что следующий код выделит vec
в стеке функции, а затем вернет его как значение.
// main.cpp
float colour[3] = {1.0f, 1.0f, 0.0f};
std::cout << "arr: " << colour[0] << ", " << colour[1] << ", " << colour[2] << std::endl;
glm::vec3 c = arr_to_vec3(colour);
std::cout << "vec: " << c.x << ", " << c.y << ", " << c.z << std::endl;
// util.cpp
glm::vec3 arr_to_vec3(float arr[3]) {
std::cout << "fn.arr: " << arr[0] << ", " << arr[1] << ", " << arr[2] << std::endl;
glm::vec3 vec = glm::vec3(arr[0], arr[1], arr[2]);
std::cout << "fn.vec: " << vec.x << ", " << vec.y << ", " << vec.z << std::endl;
return vec;
}
Из вышеприведенного вывода, похоже, нет.Что-то должно быть освобождено значение, так как последний вывод показывает случайный мусор.Может быть, float
по какой-то причине не скопированы, а возвращенный вектор указывает на кадр стека arr_to_vec3
?Мне не совсем понятно, как данные хранятся в векторе и какая семантика применяется.
Странно, я не могу воспроизвести, если просто скопировать эти два блока кода в пустой проект (возможно, память там не очищена случайно).