Hejsan, denna kod fungerar finfint i Visual c++ 2008: Ja, det bör du ha gjort. Såvida du inte allokerar något själv så nöjer sig SDL med det. Varför inte göra som man gör i C++?Hej, problem med SDL, lägga pekare i en array
[code]
arrPics[index] = new SDL_Surface* = IMG_Load(path);
[/code]
arrPics ser ut såhär:
[code]
SDL_Surface *arrPics[16];
[/code]
I Dev cpp får jag denna error:
ISO C++ forbids cast to non-reference type used as lvalue
Jag har ingen aning om hur jag ska skriva så att dev cpp godkänner detta.
Tack på förhand!
Edit;
Denna kod fixade det:
[code]
SDL_Surface *tmpImg = IMG_Load(path);
arrPics[index] = tmpImg;
[/code]
Eftersom att jag måste ta bort surface för att ge tillbaka datorn minnet som jag använt kör jag denna loop:
[code]
for(int i = 0; i < 16; i++)
{
if( arrPics[i] != 0 )
{
SDL_FreeSurface(arrPics[i]);
}
}
[/code]
Har jag frigjort allt allkolerat minne då?Sv: Hej, problem med SDL, lägga pekare i en array
Sv: Hej, problem med SDL, lägga pekare i en array
Använd t.ex. shared_ptr istället för pekare.
<code>
typedef shared_ptr<SDL_Surface> SDLSurface;
</code>
Använd vector istället för arrayer
<code>
std::vector<SDLSurface> arrPics;
</code>
<code>
for (int ii = 0; ii < 16; ++ii)
arrpics.push_back(SDLSurface(IMG_Load(path), std::ptr_fun(SDL_FreeSurface)));
</code>