programa en C (malloc :S)

Hola, estaba haciendo un programa en c (lenguaje del que no tengo ni zorra), es una especie de editor de mapas en modo texto, tiene que ir pidiendo los datos de cada una de las tiles del mapa y guardarlos en un array.


#include


main()
{
int ancho, alto, n_tiles, i, j, k=0;

typedef struct {
int grafico;
int alpha;
int dureza;
} casilla;

casilla * tiles;

printf("Escriba el ancho del mapa: ");
scanf("%d", &ancho);

printf("Escriba el alto del mapa: ");
scanf("%d", &alto);

n_tiles = ancho * alto; //Numero de casillas que componen el mapa

printf("Va a crear un mapa de %d x %d (%d casillas en total)\n", ancho, alto, n_tiles);

tiles = (casilla *) malloc (n_tiles * sizeof(casilla)); //Reserva de memoria para el array


printf("Introduccion de datos:\n");

for(i = 0; i < alto; i++){
printf("Casillas de la fila %d:\n", i+1);
for(j = 0; j < ancho; j++){
printf(" Casilla %d, %d:\n", i+1, j+1);
printf(" Introduzca el tipo de imagen: ");
scanf("%d", tiles[k].grafico);
printf(" Introduzca el grado de transparacencia de la imagen (0 - 255): ");
scanf("%d", tiles[k].alpha);
printf(" Introduzca el grado de dureza de la imagen (0 - 10: ");
scanf("%d", tiles[k].dureza);
k++:
}
}


Aqui da error
scanf("%d", tiles[k].grafico);

He probado poniendo un & antes de tiles, pero tengo segmentation fault de las dos formas. No entiendo muy bien como funciona malloc, pero algo va mal, porque

tiles = (casilla *) malloc (n_tiles * sizeof(casilla));

si hago sizeof de casilla queda 12 (claro, 3 datos int) pero si hago el sizeof de tiles, queda siempre 4, alomejor es porque es un puntero, pero no se.

Sabe alguien que esta mal? Saludos y gracias.


P.D Faltan los free, pero es que aun falta medio programa...
P.P.D. Vaya en vista previa se ha ido la identacion de los for a tomar por c***
Sí, se pierden los tabuladores.

Prueba con &(tiles[k].grafico)
Ahi lo tienes!

donde ponias k++: es k++;

tambien se te olvidó el poner el & para referencia..



#include

typedef struct {
int grafico;
int alpha;
int dureza;
} casilla;


int main()
{
int ancho, alto, n_tiles, i, j, k=0;


casilla *tiles;

printf("Escriba el ancho del mapa: ");
scanf("%d", &ancho);

printf("Escriba el alto del mapa: ");
scanf("%d", &alto);

n_tiles = ancho * alto; //Numero de casillas que componen el mapa

printf("Va a crear un mapa de %d x %d (%d casillas en total)\n", ancho, alto, n_tiles);

tiles = (casilla *) malloc(n_tiles * sizeof(casilla)); //Reserva de memoria para el array


printf("Introduccion de datos:\n");

for(i = 0; i < alto; i++){
printf("Casillas de la fila %d:\n", i+1);
for(j = 0; j < ancho; j++){
printf(" Casilla %d, %d:\n", i+1, j+1);
printf(" Introduzca el tipo de imagen: ");
scanf("%d", &(tiles[k].grafico));
printf(" Introduzca el grado de transparacencia de la imagen (0 - 255): ");
scanf("%d", &(tiles[k].alpha));
printf(" Introduzca el grado de dureza de la imagen (0 - 10: ");
scanf("%d", &(tiles[k].dureza));
k++;
}
}

printf("\nDone!\n\n");

return 0;
}

donde ponias k++: es k++;


Si eso lo he debido perder en cuty&paste ;)


Gracias, era lo del &, pero como dice Harl, con parentesis, ya funciona.

Saludos.
3 respuestas