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.
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
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 ;-)
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();.#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;
}
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: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});
}
//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)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});
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 ;-)