Probleme de developpement c
Résolu
hadrien.costa-robert
-
hadrien.costa-robert -
hadrien.costa-robert -
Bonjour,
Je vient vous poser une question portant sur le developpement c avec SDL2
En effet apres avoir codé cette fonction mon programme compile mais crache lorsque je le lance
fonction :
void InitSDL(App app)
{
if (SDL_Init(SDL_INIT_VIDEO) != 0)
SDL_ExitWithError("impossible d'initialiser la bibliotheque SDL2");
printf("L'initialisation de la bibliotheque SDL2 est une reussite !\n");
app->window = NULL;
app->window = SDL_CreateWindow("SDL2",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
SDL_SCREEN_WIDTH,
SDL_SCREEN_HEIGHT, 0);
if (app->window == NULL)
SDL_ExitWithError("impossible de generer la fenetre SDL2");
printf("La generation de la fenetre SDL2 est une reussite !\n");
app->renderer = NULL;
app->renderer = SDL_CreateRenderer(app->window, -1, SDL_RENDERER_SOFTWARE);
if (app->renderer == NULL)
{
SDL_DestroyWindow(app->window);
SDL_ExitWithError("impossible de generer le rendu SDL2");
}
printf("La generation du rendu SDL2 est une reussite !\n");
return;
}
Quellqu'un pourrait t-il m'aider ?
Je vient vous poser une question portant sur le developpement c avec SDL2
En effet apres avoir codé cette fonction mon programme compile mais crache lorsque je le lance
fonction :
void InitSDL(App app)
{
if (SDL_Init(SDL_INIT_VIDEO) != 0)
SDL_ExitWithError("impossible d'initialiser la bibliotheque SDL2");
printf("L'initialisation de la bibliotheque SDL2 est une reussite !\n");
app->window = NULL;
app->window = SDL_CreateWindow("SDL2",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
SDL_SCREEN_WIDTH,
SDL_SCREEN_HEIGHT, 0);
if (app->window == NULL)
SDL_ExitWithError("impossible de generer la fenetre SDL2");
printf("La generation de la fenetre SDL2 est une reussite !\n");
app->renderer = NULL;
app->renderer = SDL_CreateRenderer(app->window, -1, SDL_RENDERER_SOFTWARE);
if (app->renderer == NULL)
{
SDL_DestroyWindow(app->window);
SDL_ExitWithError("impossible de generer le rendu SDL2");
}
printf("La generation du rendu SDL2 est une reussite !\n");
return;
}
Quellqu'un pourrait t-il m'aider ?
Configuration: Windows / Chrome 94.0.4606.61
5 réponses
-
Bonjour,
Une information importante qui manque est : qu'est-ce qu'il y a lors de l'appel àInitSDL(&app)
? -
la structure est :
typedef struct Application
{
SDL_Window *window;
SDL_Renderer *renderer;
} Application *App;
L'appel de la fonction est:
App app;
InitSDL(app); -
App
est un pointeur. Tu passes donc un pointeur non initialisé à ta fonction! Le compilateur a du s'étouffer! As-tu lu les warnings?
Le code devrait être:struct Application app; InitSDL( &app );
ou à la rigueur:App app = malloc( sizeof(*app) ); InitSDL( app );
-
Hey meci pour ta rapidité de reponse.
J'ai recodé mon programme plus proprement et appliqué ta technique.
Elle regle en effet le probleme mais en crée malhereusement un autre.
Maintenant mon code ressemble a ca :
fonction.cvoid InitSDL(App app)
{
if (SDL_Init(SDL_INIT_VIDEO) != 0)
SDL_ExitWithError("impossible d'initialiser la bibliotheque SDL2");
printf("L'initialisation de la bibliotheque SDL2 est une reussite !\n");
app.window = NULL;
app.window = SDL_CreateWindow("SDL2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SDL_SCREEN_WIDTH, SDL_SCREEN_HEIGHT, 0);
if (app.window == NULL)
SDL_ExitWithError("impossible de generer la fenetre SDL2");
printf("La generation de la fenetre SDL2 est une resussite !\n");
app.renderer = NULL;
app.renderer = SDL_CreateRenderer(app.window, -1, SDL_RENDERER_SOFTWARE);
if (app.renderer == NULL)
{
SDL_DestroyWindow(app.window);
SDL_ExitWithError("impossible de generer le rendu SDL2");
}
printf("La generation du rendu SDL2 est une reussite !\n");
return;
}
main.cint main(int argc, char **argv)
{
struct App app;
InitSDL(&app);
while (1)
{
SDL_prepareScene(&app);
SDL_doInput();
SDL_presentScene(&app);
SDL_Delay(16);
}
SDL_CleanApp(&app);
SDL_Quit();
return 1;
}
ERROR:
error: storage size of 'app' isn't known
5 | struct App app-
Salut hadrien.costa-robert, et salut Dalfab :-)
Tu as ce message d'erreur carstruct App
n'est pas un type connu.
typedef struct Application { SDL_Window *window; SDL_Renderer *renderer; } Application *App;
Si je lis bien ce code complexe, celui-ci contient :- une définition d'une struct dont l'étiquette est Application
- une définition d'un alias de type avec typedef indiquant que
struct Application
peut aussi être appelée Application - une tentative de déclaration d'un pointeur sur ce type avec une variable pointeur qui s'appelle App
Cette dernière tentative ne fonctionne pas chez moi et donne ceci :
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
} Application *App;
Rectifie ton type en :
typedef struct Application { SDL_Window *window; SDL_Renderer *renderer; } Application;
Ensuite, dans ton main, déclare ta variable pointeur et initialise le. Tu dois initialiser la variable pointeur en lui affectant une adresse mémoire d'un stockage où les informations que tu veux y stocker pourront l'être.
quelque chose comme :
int main(int argc, char **argv) { Application * App; App = malloc(sizeof(Application)); InitSDL(App); (...)
ou alors :
int main(int argc, char **argv) { Application App; InitSDL(&App); (...)
Vu que tu passes (dois passer) un pointeur surstruct Application
(ou un pointeur sur le typeApplication
qui est juste son alias), le prototype de ta fonction personnelle d'initialisation devrait être :
void InitSDL(Application * app)
et le code dans ta fonction devrait accéder aux membres de la struct avec->
et non pas.
, puisque c'est un pointeur.
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Ok merci beaucoup pour cette reponse complexe et bien expliquer.
Ca ma permit de regler le probléme !