Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C++ > SDL Free Surface > Lecture du sujet

SDL Free Surface

... de tableaux de structures, ou l'inverse!

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne ibizaman # Posté le 29/05/2007 à 20:05:40
Carpe Diem
Groupe : Membres
Bonjour!

Je m'excuse à l'avance si ce topic a déjà été posté!

J'ai créé une structure:

struct Surface
{
__SDL_Surface *surf;
__SDL_Rect pos
};

ensuite, dans le main, j'ai créé un tableau nommé cases:

Surface cases[32][24];

Et j'ai voulu libérer les "cases" avec

for(int i = 0; i<32; i++)
__for(int j = 0; j<24; j++)
____SDL_FreeSurface(cases[i][j].surf);

Tout se passe bien dans le compilateur, mais pas quand je "run" le programme...

HELP!

Merci d'avance


EDIT : J'ai testé et même si je déclare

Surface cases;

Et que je fais

_SDL_FreeSurface(cases.surf);

Ca marche dans le compilateur mais pas quand j'exécute le programme
Édité le 29/05/2007 à 20:49:48 par ibizaman
Hors ligne int21h # Posté le 31/05/2007 à 00:14:26
Groupe : Membres
Puisque nous sommes en C++ pourquoi ne pas profiter du C++ ?

Code : C++

struct Surface
{
SDL_Surface *surf;
SDL_Rect pos;

    Surface(SDL_Surface * s = NULL):surf(s)
    {
        // ici une initialisation par défaut de pos
    };
   
    ~Surface()
    {
       if (surf != NULL)
       {
           SDL_FreeSurface(surf);
           // Ceinture + Bretelles
           surf = NULL;
       }
    }
};


Certes, ce n'est qu'un début, l'objectif est d'aller vers des choses plus évoluées, mais il faut bien commencer un jour ^^ . Dans le code que je te propose le SDL_FreeSurface sera exécuté si le pointeur n'est pas NULL, à la libération de l'objet. Chaque fois qu'une instance de la structure est créée, le pointeur surf est mis à NULL. Si tu n'as pas de copie de surface, ton problème est résolu, sinon il va falloir bosser un peu tes cours de C++ ;)

Edit un bout de code pour l'utilisation

Code : C++


int main()
{
// init SDL bla bla bla

    if (InitSdl == true)
    {
       Surface s(LoadSurface("toto.bmp"))// Initialise une surface
       Surface ts[5];                       // Prépare 5 surface
       ts[2].surf = LoadSurface("polo.bmp");// Initialise la 3ème avec une vrai surface,
                                            // les autres sont créées mais vides.
    }
    // Quand on arrive ici s et ts sont détruits, ce qui à été alloué est libéré
    // libération SDL bla bla bla
    return 0;
}

Édité le 31/05/2007 à 00:29:01 par int21h
Hors ligne ibizaman # Posté le 02/06/2007 à 15:19:21
Carpe Diem
Groupe : Membres
Merci beucoup de m'avoir répondu!

Je ne comprend pas vraiment ce que tu veux faire mais... ça ne résoud pas directement mon problème! Je ne comprend pas pourquoi mon bout de code foire :(

Surtout qu'il ne foire QUE quand on le test (donc PAS à la compilation o_O )

Je me demande surtout si c'est possible qu'il fonctionne comme je l'ai fait...

Ceci dit je vais essayer ta technique aussi ;)
Édité le 03/06/2007 à 17:11:17 par ibizaman

Retour au forum "Langage C++" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 129 Zéros connectés | Requêtes SQL 6 requêtes | Temps de génération de la page : Total (SQL) 0.0201s (0.0056s)