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.


Messages - mscofield

Pages: [1]
1
C / Re : [CRASH]Creer un tableau de sfConvexShape*
« le: Septembre 04, 2012, 05:15:57 pm »
Bah,
cd /usr/local/lib
rm SFML -R
cd ..
cd include
rm SFML -R

Apres ca les repertoires etaient bien vides, maintenant ils contiennent respectivement les lib(c)sfml-****-d.so et les .h.

Apparement, le probleme vient du fait que le second argument de sfRenderWindow_drawConvexShape() contient une valeur etrange (object=0x2c40000000a) alors qu'il devrait contenir 0x1175040 (ce qui arrive bien lorsque sizeArray vaut 3).

Le plus simple serait de voir si tu arrives a reproduire le bug ?

2
C / Re : [CRASH]Creer un tableau de sfConvexShape*
« le: Septembre 04, 2012, 04:10:16 pm »
J'utilisais la RC.
J'ai supprime les dossiers SFML dans /usr/local/lib et /usr/local/include et installe les dernieres sources mais le programme crashe toujours.

Sortie de gdb (de la lib version debug):
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff67af570 in sf::RenderTarget::draw (this=0x60e978, drawable=...,
    states=...)
    at /home/mscofield/SFML/SFML/src/SFML/Graphics/RenderTarget.cpp:126
126         drawable.draw(*this, states);
(gdb) bt full
#0  0x00007ffff67af570 in sf::RenderTarget::draw (this=0x60e978, drawable=...,
    states=...)
    at /home/mscofield/SFML/SFML/src/SFML/Graphics/RenderTarget.cpp:126
No locals.
#1  0x00007ffff79c5619 in sfRenderWindow_drawConvexShape (
    renderWindow=0x60e950, object=0x2c40000000a, states=0x0)
    at /home/mscofield/SFML/CSFML/src/SFML/Graphics/RenderWindow.cpp:391
No locals.
#2  0x0000000000400c2a in main () at test.c:62
        event = {type = sfEvtMouseMoved, size = {type = sfEvtMouseMoved,
            width = 708, height = 829}, key = {type = sfEvtMouseMoved,
            code = 708, alt = 829, control = 0, shift = 4197712, system = 0},
          text = {type = sfEvtMouseMoved, unicode = 708}, mouseMove = {
            type = sfEvtMouseMoved, x = 708, y = 829}, mouseButton = {
            type = sfEvtMouseMoved, button = 708, x = 829, y = 0},
          mouseWheel = {type = sfEvtMouseMoved, delta = 708, x = 829, y = 0},
          joystickMove = {type = sfEvtMouseMoved, joystickId = 708,
            axis = 829, position = 0}, joystickButton = {
            type = sfEvtMouseMoved, joystickId = 708, button = 829},
          joystickConnect = {type = sfEvtMouseMoved, joystickId = 708}}
        window = 0x60e950
        shape = 0x1175040
        shapeArray = 0x7fffffffe958
---Type <return> to continue, or q <return> to quit---
        i = 3
 

3
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]