函数Simd :: Fill()的奇怪行为

时间:2017-07-04 10:49:36

标签: c++ memory-corruption simd-library

我使用Simd::Fill中的函数Simd Library。它在大多数情况下都能正常工作。但有时会有一种奇怪的行为。例如,在这种情况下:

#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”:

enter image description here

图像中有一种奇怪的噪音。它类似于内存损坏,但我找不到它在哪里。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

似乎我发现了一个导致这种行为的错误。 this类的赋值运算符View& operator=(const View &view)仅指定对其他图像的引用。所以你的函数Create()返回对本地对象的引用。

要创建Simd :: View的副本,您必须使用函数Simd::View或方法Simd::Copy()