0
所以我想爲SFF中的sf :: Image製作一個淡入淡出的過渡動畫,而且我有一個小問題。解構sf時堆損壞::圖像陣列
當我就不做評論瞭如下調用的函數,我在main()
末得到一個錯誤都被解構的圖像時說
「Windows已經引發了斷點,這可能是由於堆的腐敗 「。
發生這種情況就行包含的代碼GLCheck(glDeleteTextures(1, &Texture));
爲什麼會變成這樣發生的,爲什麼CreateTransition()僅運行時?
再一個注意:當我註釋掉aray[I] = aray[0]
時,不會發生中斷。
我發佈了下面的函數。
void CreateTransition(sf::Image& start, sf::Image animationArray[numbImgs]){
animationArray[0] = start;
void threadFunc(void* imgArray);
sf::Thread thread(threadFunc, reinterpret_cast<void*>(animationArray));
thread.Launch();
thread.Wait(); // comment this out once I get the code working
}
void threadFunc(void* ptr){
sf::Image* aray = reinterpret_cast<sf::Image*> (ptr);
sf::Color filter(0, 0, 0, 5);
for(int I= 1; I< numbImgs; I++){
//aray[I].Copy(aray[0], 0, 0, sf::IntRect(0, 0, 0, 0), true);
aray[I] = aray[0]; // error doesn't occur when commented out
RecolorImage(aray[I], filter);
}
}
Image& Image::operator =(const Image& Other)
{
Image Temp(Other);
std::swap(myWidth, Temp.myWidth);
std::swap(myHeight, Temp.myHeight);
std::swap(myTextureWidth, Temp.myTextureWidth);
std::swap(myTextureHeight, Temp.myTextureHeight);
std::swap(myTexture, Temp.myTexture);
std::swap(myIsSmooth, Temp.myIsSmooth);
std::swap(myNeedArrayUpdate, Temp.myNeedArrayUpdate);
std::swap(myNeedTextureUpdate, Temp.myNeedTextureUpdate);
myPixels.swap(Temp.myPixels);
return *this;
}