Core dumped while SDL_FillRect or SDL_BlitSurface

Hi all!, I’m new to the list and I already have questions to ask…
I recently started to develop under SDL in a Ubuntu box and I have a
headeache with a function.
It just core dump’s when I execute it when I perform a SDL_FillRect or a
SDL_BlitSurface.
I don’t know why this can be because all seems to be right so I’ll post
you the code and the error I get when executing.

This is the function and the structure I use and as attachement I send
you all the code.
info is a global variable.
void LetrasArribaLetrasAbajo()
{
// Se muestran letras arriba y abajo sobre un fondo negro
SDL_Surface *textoa = NULL , *textob = NULL;
SDL_Rect rectangulo1, rectangulo2, parte1, parte2;
TTF_Font *fuente = NULL;
char textoamostrar[20];
float altura;
int valor;
fuente = TTF_OpenFont(“Telegraphem.ttf”, 75);//rutafuente1, 75);
// Acoto los dos textos
printf(“Estoy en los textos\n”);
strcpy(textoamostrar, “info.texto1”);
//textoa = TTF_RenderText_Solid(fuente, “HOLA”, *info.ColorFuente1);
textoa = TTF_RenderText_Solid(info.Fuente1, info.texto1,
*info.ColorFuente1);
strcpy(textoamostrar, info.texto2);
textob = TTF_RenderText_Solid(fuente, info.texto2, info.ColorFuente2);
//textob = TTF_RenderText_Solid(info.Fuente2, “ADIOS”,
info.ColorFuente2);
parte1.w = textoa->w;
parte1.h = textoa->h;
parte2.w = textob->w;
parte2.h = textob->w;
// Calculo la posicion en las que voy a centrar ambas informaciones
altura = parte1.h + parte2.h;
// Sobrante
altura = info.h - altura;
printf(“Altura sobrante %f\n”, altura);
// Habr?a que controlar el error aqu?
// Reparto el sobrante en 3 y los distribuyo as?
// Sobrante/3
// Texto1
// Sobrante/3
// Texto2
// Sobrante/3
altura = altura / 3;
printf(“Altura entre textos %f\n”, altura);
parte1.y = info.y + (int) altura;
printf(“Altura texto 1 %d\n”, parte1.y);
parte2.y = parte1.y + parte1.h + (int) altura;
printf(“Altura texto 2 %d\n”, parte2.y);
// Tengo que centrar los textos en la horizontal
parte1.x = info.x + (int) ((info.w - parte1.w)/2);
parte2.x = info.x + (int) ((info.w - parte2.w)/2);
// Acoto los rect?ngulos para los fondos
rectangulo1.x = info.x;
rectangulo1.y = info.y;
rectangulo1.w = info.w;
rectangulo1.h = parte1.h + (int) (3
altura/2); // Dejo los fondos a
mitad de fusi?n entre los dos textos
rectangulo2.x = rectangulo1.x;
rectangulo2.y = info.y + rectangulo1.h;
rectangulo2.w = info.w;
rectangulo2.h = parte2.h + (int) (3
altura/2);
// Llegados aqu?, tengo las m?scaras para pintar en la pantalla, parte1
y parte2.
// Pongo los fondos
SDL_FillRect(info.Pantalla, &rectangulo1,
SDL_MapRGB(info.Pantalla->format, info.ColorFondo1->r,
info.ColorFondo1->g, info.ColorFondo1->b)); // IT CRASHES HERE
SDL_FillRect(info.Pantalla, &rectangulo2,
SDL_MapRGB(info.Pantalla->format, info.ColorFondo2->r,
info.ColorFondo2->g, info.ColorFondo2->b)); // ALSO CRASHES HERE IF I
COMMENT THE OTHER SDL_FillRect
// Pongo los textos
printf(“Rectangulo 1 destino\n”);
printf(“x %d\n”, parte1.x);
printf(“y %d\n”, parte1.y);
printf(“w %d\n”, parte1.w);
printf(“h %d\n”, parte1.h);
printf(“Texto a Mostrar: %s\n”, info.texto1);
printf(“Rectangulo 2 destino\n”);
printf(“x %d\n”, parte2.x);
printf(“y %d\n”, parte2.y);
printf(“w %d\n”, parte2.w);
printf(“h %d\n”, parte2.h);
printf(“Texto a Mostrar: %s\n”, info.texto2);
/textoa = SDL_LoadBMP(“imagen.bmp”);
scanf("%d", &valor);
/
SDL_BlitSurface(textoa, NULL, info.Pantalla, &parte1); // ALSO HERE IF
I COMMENT THE UPPER ERRORS
SDL_BlitSurface(textob, NULL, info.Pantalla, &parte2); // AND HERE IF I
COMMENT THE UPPER BlitSurface
// Lo saco todo por pantalla
SDL_Flip(info.Pantalla);
// Libero la memoria que he cogido
SDL_FreeSurface(textoa);
SDL_FreeSurface(textob);
// Ya puedo salir
//scanf("%d", &valor);
}

// THE STRUCTURE

ypedef struct info_pantalla {
// Espero que se me inicialize todo aunque sea con NULL
char rutaicono1[20];
char rutaicono2[20];
TTF_Font *Fuente1;
TTF_Font *Fuente2;
SDL_Color *ColorFondo1;
SDL_Color *ColorFuente1;
char texto1[20];
SDL_Color *ColorFondo2;
SDL_Color *ColorFuente2;
char texto2[20];
SDL_Surface *Pantalla;
int x, y, w, h;
char blink1, blink2;
}info_pantalla;

-------------- next part --------------
A non-text attachment was scrubbed…
Name: Blinks.c
Type: text/x-csrc
Size: 11005 bytes
Desc: not available
URL: http://lists.libsdl.org/pipermail/sdl-libsdl.org/attachments/20071023/558ed019/attachment.c

Hi,

it crashes because you are calling SDL_FillRect with an undefined SDL_Surface,
info.Pantalla . When you call RellenarEstructura(), you are passing an
undefined value (the one it is holding “screen”), that gets stored in the
info structure. Later calls with this value leads to crash. You have to
fill “screen” with the SetVideoMode() result before you begin to use it.
Remember that when you copy the “screen” pointer to “info.pantalla” pointer,
you are copying its value, so it will not be automatically updated when you
change “screen” later.

El Tuesday 23 October 2007 12:05:13 Ignacio Lorenzo Subir? Otal escribi?:> Hi all!, I’m new to the list and I already have questions to ask…

I recently started to develop under SDL in a Ubuntu box and I have a
headeache with a function.
It just core dump’s when I execute it when I perform a SDL_FillRect or a
SDL_BlitSurface.
I don’t know why this can be because all seems to be right so I’ll post
you the code and the error I get when executing.

This is the function and the structure I use and as attachement I send
you all the code.
info is a global variable.
void LetrasArribaLetrasAbajo()
{
// Se muestran letras arriba y abajo sobre un fondo negro
SDL_Surface *textoa = NULL , *textob = NULL;
SDL_Rect rectangulo1, rectangulo2, parte1, parte2;
TTF_Font *fuente = NULL;
char textoamostrar[20];
float altura;
int valor;
fuente = TTF_OpenFont(“Telegraphem.ttf”, 75);//rutafuente1, 75);
// Acoto los dos textos
printf(“Estoy en los textos\n”);
strcpy(textoamostrar, “info.texto1”);
//textoa = TTF_RenderText_Solid(fuente, “HOLA”, *info.ColorFuente1);
textoa = TTF_RenderText_Solid(info.Fuente1, info.texto1,
*info.ColorFuente1);
strcpy(textoamostrar, info.texto2);
textob = TTF_RenderText_Solid(fuente, info.texto2, info.ColorFuente2);
//textob = TTF_RenderText_Solid(info.Fuente2, “ADIOS”,
info.ColorFuente2);
parte1.w = textoa->w;
parte1.h = textoa->h;
parte2.w = textob->w;
parte2.h = textob->w;
// Calculo la posicion en las que voy a centrar ambas informaciones
altura = parte1.h + parte2.h;
// Sobrante
altura = info.h - altura;
printf(“Altura sobrante %f\n”, altura);
// Habr?a que controlar el error aqu?
// Reparto el sobrante en 3 y los distribuyo as?
// Sobrante/3
// Texto1
// Sobrante/3
// Texto2
// Sobrante/3
altura = altura / 3;
printf(“Altura entre textos %f\n”, altura);
parte1.y = info.y + (int) altura;
printf(“Altura texto 1 %d\n”, parte1.y);
parte2.y = parte1.y + parte1.h + (int) altura;
printf(“Altura texto 2 %d\n”, parte2.y);
// Tengo que centrar los textos en la horizontal
parte1.x = info.x + (int) ((info.w - parte1.w)/2);
parte2.x = info.x + (int) ((info.w - parte2.w)/2);
// Acoto los rect?ngulos para los fondos
rectangulo1.x = info.x;
rectangulo1.y = info.y;
rectangulo1.w = info.w;
rectangulo1.h = parte1.h + (int) (3
altura/2); // Dejo los fondos a
mitad de fusi?n entre los dos textos
rectangulo2.x = rectangulo1.x;
rectangulo2.y = info.y + rectangulo1.h;
rectangulo2.w = info.w;
rectangulo2.h = parte2.h + (int) (3
altura/2);
// Llegados aqu?, tengo las m?scaras para pintar en la pantalla, parte1
y parte2.
// Pongo los fondos
SDL_FillRect(info.Pantalla, &rectangulo1,
SDL_MapRGB(info.Pantalla->format, info.ColorFondo1->r,
info.ColorFondo1->g, info.ColorFondo1->b)); // IT CRASHES HERE
SDL_FillRect(info.Pantalla, &rectangulo2,
SDL_MapRGB(info.Pantalla->format, info.ColorFondo2->r,
info.ColorFondo2->g, info.ColorFondo2->b)); // ALSO CRASHES HERE IF I
COMMENT THE OTHER SDL_FillRect
// Pongo los textos
printf(“Rectangulo 1 destino\n”);
printf(“x %d\n”, parte1.x);
printf(“y %d\n”, parte1.y);
printf(“w %d\n”, parte1.w);
printf(“h %d\n”, parte1.h);
printf(“Texto a Mostrar: %s\n”, info.texto1);
printf(“Rectangulo 2 destino\n”);
printf(“x %d\n”, parte2.x);
printf(“y %d\n”, parte2.y);
printf(“w %d\n”, parte2.w);
printf(“h %d\n”, parte2.h);
printf(“Texto a Mostrar: %s\n”, info.texto2);
/textoa = SDL_LoadBMP(“imagen.bmp”);
scanf("%d", &valor);
/
SDL_BlitSurface(textoa, NULL, info.Pantalla, &parte1); // ALSO HERE IF
I COMMENT THE UPPER ERRORS
SDL_BlitSurface(textob, NULL, info.Pantalla, &parte2); // AND HERE IF I
COMMENT THE UPPER BlitSurface
// Lo saco todo por pantalla
SDL_Flip(info.Pantalla);
// Libero la memoria que he cogido
SDL_FreeSurface(textoa);
SDL_FreeSurface(textob);
// Ya puedo salir
//scanf("%d", &valor);
}

// THE STRUCTURE

ypedef struct info_pantalla {
// Espero que se me inicialize todo aunque sea con NULL
char rutaicono1[20];
char rutaicono2[20];
TTF_Font *Fuente1;
TTF_Font *Fuente2;
SDL_Color *ColorFondo1;
SDL_Color *ColorFuente1;
char texto1[20];
SDL_Color *ColorFondo2;
SDL_Color *ColorFuente2;
char texto2[20];
SDL_Surface *Pantalla;
int x, y, w, h;
char blink1, blink2;
}info_pantalla;

The problem is exactly that I create the pointer before knowing where it
exactly points… A matter of newby maybe…
Thank you very much,

Nacho
El mar, 23-10-2007 a las 16:09 +0200, Alberto Luaces escribi?:> Hi,

it crashes because you are calling SDL_FillRect with an undefined SDL_Surface,
info.Pantalla . When you call RellenarEstructura(), you are passing an
undefined value (the one it is holding “screen”), that gets stored in the
info structure. Later calls with this value leads to crash. You have to
fill “screen” with the SetVideoMode() result before you begin to use it.
Remember that when you copy the “screen” pointer to “info.pantalla” pointer,
you are copying its value, so it will not be automatically updated when you
change “screen” later.

El Tuesday 23 October 2007 12:05:13 Ignacio Lorenzo Subir? Otal escribi?:

Hi all!, I’m new to the list and I already have questions to ask…
I recently started to develop under SDL in a Ubuntu box and I have a
headeache with a function.
It just core dump’s when I execute it when I perform a SDL_FillRect or a
SDL_BlitSurface.
I don’t know why this can be because all seems to be right so I’ll post
you the code and the error I get when executing.

This is the function and the structure I use and as attachement I send
you all the code.
info is a global variable.
void LetrasArribaLetrasAbajo()
{
// Se muestran letras arriba y abajo sobre un fondo negro
SDL_Surface *textoa = NULL , *textob = NULL;
SDL_Rect rectangulo1, rectangulo2, parte1, parte2;
TTF_Font *fuente = NULL;
char textoamostrar[20];
float altura;
int valor;
fuente = TTF_OpenFont(“Telegraphem.ttf”, 75);//rutafuente1, 75);
// Acoto los dos textos
printf(“Estoy en los textos\n”);
strcpy(textoamostrar, “info.texto1”);
//textoa = TTF_RenderText_Solid(fuente, “HOLA”, *info.ColorFuente1);
textoa = TTF_RenderText_Solid(info.Fuente1, info.texto1,
*info.ColorFuente1);
strcpy(textoamostrar, info.texto2);
textob = TTF_RenderText_Solid(fuente, info.texto2, info.ColorFuente2);
//textob = TTF_RenderText_Solid(info.Fuente2, “ADIOS”,
info.ColorFuente2);
parte1.w = textoa->w;
parte1.h = textoa->h;
parte2.w = textob->w;
parte2.h = textob->w;
// Calculo la posicion en las que voy a centrar ambas informaciones
altura = parte1.h + parte2.h;
// Sobrante
altura = info.h - altura;
printf(“Altura sobrante %f\n”, altura);
// Habr?a que controlar el error aqu?
// Reparto el sobrante en 3 y los distribuyo as?
// Sobrante/3
// Texto1
// Sobrante/3
// Texto2
// Sobrante/3
altura = altura / 3;
printf(“Altura entre textos %f\n”, altura);
parte1.y = info.y + (int) altura;
printf(“Altura texto 1 %d\n”, parte1.y);
parte2.y = parte1.y + parte1.h + (int) altura;
printf(“Altura texto 2 %d\n”, parte2.y);
// Tengo que centrar los textos en la horizontal
parte1.x = info.x + (int) ((info.w - parte1.w)/2);
parte2.x = info.x + (int) ((info.w - parte2.w)/2);
// Acoto los rect?ngulos para los fondos
rectangulo1.x = info.x;
rectangulo1.y = info.y;
rectangulo1.w = info.w;
rectangulo1.h = parte1.h + (int) (3
altura/2); // Dejo los fondos a
mitad de fusi?n entre los dos textos
rectangulo2.x = rectangulo1.x;
rectangulo2.y = info.y + rectangulo1.h;
rectangulo2.w = info.w;
rectangulo2.h = parte2.h + (int) (3
altura/2);
// Llegados aqu?, tengo las m?scaras para pintar en la pantalla, parte1
y parte2.
// Pongo los fondos
SDL_FillRect(info.Pantalla, &rectangulo1,
SDL_MapRGB(info.Pantalla->format, info.ColorFondo1->r,
info.ColorFondo1->g, info.ColorFondo1->b)); // IT CRASHES HERE
SDL_FillRect(info.Pantalla, &rectangulo2,
SDL_MapRGB(info.Pantalla->format, info.ColorFondo2->r,
info.ColorFondo2->g, info.ColorFondo2->b)); // ALSO CRASHES HERE IF I
COMMENT THE OTHER SDL_FillRect
// Pongo los textos
printf(“Rectangulo 1 destino\n”);
printf(“x %d\n”, parte1.x);
printf(“y %d\n”, parte1.y);
printf(“w %d\n”, parte1.w);
printf(“h %d\n”, parte1.h);
printf(“Texto a Mostrar: %s\n”, info.texto1);
printf(“Rectangulo 2 destino\n”);
printf(“x %d\n”, parte2.x);
printf(“y %d\n”, parte2.y);
printf(“w %d\n”, parte2.w);
printf(“h %d\n”, parte2.h);
printf(“Texto a Mostrar: %s\n”, info.texto2);
/textoa = SDL_LoadBMP(“imagen.bmp”);
scanf("%d", &valor);
/
SDL_BlitSurface(textoa, NULL, info.Pantalla, &parte1); // ALSO HERE IF
I COMMENT THE UPPER ERRORS
SDL_BlitSurface(textob, NULL, info.Pantalla, &parte2); // AND HERE IF I
COMMENT THE UPPER BlitSurface
// Lo saco todo por pantalla
SDL_Flip(info.Pantalla);
// Libero la memoria que he cogido
SDL_FreeSurface(textoa);
SDL_FreeSurface(textob);
// Ya puedo salir
//scanf("%d", &valor);
}

// THE STRUCTURE

ypedef struct info_pantalla {
// Espero que se me inicialize todo aunque sea con NULL
char rutaicono1[20];
char rutaicono2[20];
TTF_Font *Fuente1;
TTF_Font *Fuente2;
SDL_Color *ColorFondo1;
SDL_Color *ColorFuente1;
char texto1[20];
SDL_Color *ColorFondo2;
SDL_Color *ColorFuente2;
char texto2[20];
SDL_Surface *Pantalla;
int x, y, w, h;
char blink1, blink2;
}info_pantalla;


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org