Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - mscofield

Pages: [1]
1
C / [CRASH]Creer un tableau de sfConvexShape*
« le: Septembre 03, 2012, 09:49:24 pm »
Bonsoir,
j'essaye de creer un tableau de sfConvexShape* (simplement pour pouvoir iterer sur ses elements) mais je rencontre un crash que je ne comprends pas.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#include <SFML/Graphics.h>
#include <SFML/System.h>



int main() {
     sfEvent event;

        int sizeArray = 4;  //Size of the array containing the shapes

//Create Window
        sfRenderWindow *window = sfRenderWindow_create((sfVideoMode){1440, 900, 32}, "SFML window", sfTitlebar | sfClose, NULL);
        if (!window) {
                perror("Open window.");
        }


//Create Shapes
        sfConvexShape *shape = malloc(sizeof(sfConvexShape*) * sizeArray); //Alocate the space for [sizeArray] Shapes.
        sfConvexShape **shapeArray = &shape;

        //Create Original Shape
                shapeArray[0] = sfConvexShape_create();

                sfConvexShape_setPointCount(shapeArray[0], 3); //Number Of Vertices

                sfConvexShape_setPoint(shapeArray[0], 0, (sfVector2f){0,7});
                sfConvexShape_setPoint(shapeArray[0], 1, (sfVector2f){2.5,0});
                sfConvexShape_setPoint(shapeArray[0], 2, (sfVector2f){5,7});


        //Copy Shapes
        int i; 

        for (i = 1; i < sizeArray; i++) {
                shapeArray[i] = sfConvexShape_create();
                shapeArray[i] = sfConvexShape_copy(shapeArray[0]);

                sfConvexShape_move(shapeArray[i], (sfVector2f){i*100, i*100});

        }


// Start the game loop
        while (sfRenderWindow_isOpen(window)) {
        //Events
                  while (sfRenderWindow_pollEvent(window, &event))
         {
             /* Close window : exit */
             if (event.type == sfEvtClosed)
                 sfRenderWindow_close(window);
         }

        //Drawning
                sfRenderWindow_clear(window, sfBlack);

                for (i = 0; i < sizeArray; i++) {
                        sfRenderWindow_drawConvexShape(window, shapeArray[i], NULL);
                }

                sfRenderWindow_display(window);// Flip

        }


//Free variables.
        sfRenderWindow_destroy(window);

        return EXIT_SUCCESS;
}
Le crash se produit a l'appel de sfRenderWindow_drawConvexShape();.

Fait interressant : si on change la valeur de sizeArray par une valeur inferieur a 4.. le code ne crash pas et effectue ce qu'il est suppose faire.

Autre fait etrange, si on change ce code
        //Copy Shapes
        int i; 

        for (i = 1; i < sizeArray; i++) {
                shapeArray[i] = sfConvexShape_create();
                shapeArray[i] = sfConvexShape_copy(shapeArray[0]);

                sfConvexShape_move(shapeArray[i], (sfVector2f){i*100, i*100});

        }
par celui-ci:
        //Copy Shapes
                shapeArray[1] = sfConvexShape_create();
                shapeArray[1] = sfConvexShape_copy(shapeArray[0]);

                sfConvexShape_move(shapeArray[1], (sfVector2f){100, 100});

                shapeArray[2] = sfConvexShape_create();
                shapeArray[2] = sfConvexShape_copy(shapeArray[0]);

                sfConvexShape_move(shapeArray[2], (sfVector2f){200, 200});

                shapeArray[3] = sfConvexShape_create();
                shapeArray[3] = sfConvexShape_copy(shapeArray[0]);

                sfConvexShape_move(shapeArray[3], (sfVector2f){300, 300});
 
(en mettant sizeArray a 4)
le code s'execute parfaitement (alors qu'on est d'accord que c'est un code equivalent a la boucle for ?).

Bref, je pense que tout ceci vient d'un cafouillage dans la creation de mon tableau (je ne pas encore tres tres a l'aise avec les pointeurs de pointeurs de pointeurs de structures ^^').

Merci d'avance ;-)

Pages: [1]