Я использую функцию Симд :: заполняющая от Библиотека Simd. И это прекрасно работает в большинстве случаев. Но иногда бывает странное поведение. Например, в этом случае:
#include "Simd/SimdLib.hpp"
typedef Simd::View<Simd::Allocator> View;
View Create(size_t w, size_t h, uint8_t color)
{
View image(w, h, View::Gray8);
Simd::Fill(image, color);
return image;
}
int main()
{
View image;
image = Create(200, 150, 127);
image.Save("image.pgm");
return 0;
}
Сохранено «image.pgm»:
На изображении странный шум. Это похоже на повреждение памяти, но я не могу найти, где это. Кто-нибудь может мне помочь?
Кажется, я нашел ошибку, которая приводит к такому поведению.
Оператор присваивания Посмотреть& оператор = (постоянный вид &Посмотреть) из Симд :: Просмотр Класс назначает только ссылку на другое изображение. Итак, ваша функция Create () возвращает ссылку на локальный объект.
Для того, чтобы создать копию Simd :: View, вы должны использовать функцию SIMD :: Copy () или метод Симд :: Просмотр :: Clone ().
Других решений пока нет …