函数 Simd::Fill() 的奇怪行为
Strange behavior of function Simd::Fill()
我使用函数Simd::Fill from 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":
图像中有奇怪的噪点。它类似于内存损坏,但我找不到它在哪里。有人能帮帮我吗?
我似乎发现了导致此行为的错误。
赋值运算符 View& operator=(const View &view) of Simd::View class 仅将引用分配给其他图像。所以你的函数 Create() returns 引用了本地对象。
为了创建 Simd::View 的副本,您必须使用函数 Simd::Copy() or method Simd::View::Clone()。
我使用函数Simd::Fill from 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":
图像中有奇怪的噪点。它类似于内存损坏,但我找不到它在哪里。有人能帮帮我吗?
我似乎发现了导致此行为的错误。 赋值运算符 View& operator=(const View &view) of Simd::View class 仅将引用分配给其他图像。所以你的函数 Create() returns 引用了本地对象。
为了创建 Simd::View 的副本,您必须使用函数 Simd::Copy() or method Simd::View::Clone()。