Si por ejemplo tengo la siguiente estructura de datos:
struct nombre{
// código
};
struct nombre array[N]; // siendo N un entero cualquiera
Esto lo entiendo; creo un array que contiene N estructuras.
Ahora lo que quiero es hacer lo equivalente a lo anterior pero con un puntero.
Yo he intentado esto, pero seguro que es erróneo:
struct nombre{
// código
};
struct nombre *puntero;
puntero = (struct nombre*)malloc(N * sizeof(nombre));
Espero que me puedan ayudar. Un saludo.
"nombre" como tal no es nada... el identificador real es "struct nombre"
puntero = (struct nombre*)malloc(N * sizeof(struct nombre));
Solo agregar que en C la conversión explicita no es necesaria y si utilizas "sizeof *puntero" en la llamada a malloc:
puntero = malloc(N * sizeof *puntero);
Evitas indicar el tipo apuntado (lo que reduce errores lógicos).
Un saludo
Cita de: rir3760 en 30 Abril 2014, 16:45 PM
Solo agregar que en C la conversión explicita no es necesaria y si utilizas "sizeof *puntero" en la llamada a malloc:
puntero = malloc(N * sizeof *puntero);
Evitas indicar el tipo apuntado (lo que reduce errores lógicos).
Un saludo
Gracias por el detalle.
Pero en este fragmento de programa:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef char* String;
struct jugador{
String nombreJugador;
int nFichas; // número de fichas que tiene el jugador
int posicion; // NO ES REALMENTE UNA POSICIÓN SINO EL ORDEN EN QUE VA A JUGAR
String cara;
String palo;
};
struct jugador *Jugador;
Jugador = malloc(5 * sizeof *Jugador); // definimos 5 jugadores
int main(void){
// codigo
}
Me da error en
struct jugador *Jugador;
Jugador = malloc(5 * sizeof *Jugador); // definimos 5 jugadores
Y no sé cual puede ser el fallo.
Un saludo
Cita de: rir3760 en 30 Abril 2014, 16:45 PM
Solo agregar que en C la conversión explicita no es necesaria y si utilizas "sizeof *puntero" en la llamada a malloc:
puntero = malloc(N * sizeof *puntero);
Evitas indicar el tipo apuntado (lo que reduce errores lógicos).
Un saludo
Perdona, ya vi que no funcionaba porque estaba definido como global.
Pero no sé porque.
Un saludo
Porque cuando declaras una variable fuera de toda función (en tu caso "Jugador") y quieres darle un valor inicial este debe ser uno constante como 123 o "alguna cadena" (no puedes utilizar llamadas a función).
Un saludo
Cita de: rir3760 en 30 Abril 2014, 17:52 PM
Porque cuando declaras una variable fuera de toda función (en tu caso "Jugador") y quieres darle un valor inicial este debe ser uno constante como 123 o "alguna cadena" (no puedes utilizar llamadas a función).
Un saludo
Esta duda la tengo porque estoy haciendo un programa que simule el juego del poker.
Y relacionado con esto tengo lo siguiente:
typedef char* String;
struct jugador{
String nombreJugador;
int nFichas;
int posicion;
String *cara;
String *palo;
};
// código
int main(void)
{
// código
Jugador = malloc(5 * sizeof(*Jugador));
//código
reservaMemoriaManos();
//código
return EXIT_SUCCESS;
}
void reservaMemoriaManos()
{
int i, j;
for(i = 0; i<5; i++){
(Jugador + i) -> cara = (char **)malloc(2 * sizeof(char *));
(Jugador + i) -> palo = (char **)malloc(2 * sizeof(char *));
for(j = 0; j<2; j++){
(Jugador + i) -> cara[j] = (char *)malloc(7 * sizeof(char));
(Jugador + i) -> palo[j] = (char *)malloc(10 * sizeof(char));
}
}
return;
}
Y en esta última función me parece que falla el programa. Pero no sé que es.
Lo que intento hacer es que cada uno de los 5 jugadores declarados con
Jugador = malloc(5 * sizeof(*Jugador));
tengan 2 cartas, por los que deberán tener 2 palos y 2 figuras.
Lo escribo aquí para no abrir un nuevo tema, ya que está relacionado con lo anterior.
Un saludo
Falta entre otras cosas las directivas de inclusión y la declaración de la variable "Jugador", por favor publica el código fuente completo.
Un saludo
Cita de: rir3760 en 2 Mayo 2014, 23:12 PM
Falta entre otras cosas las directivas de inclusión y la declaración de la variable "Jugador", por favor publica el código fuente completo.
Un saludo
Ya lo solucioné. Es que tenía un for que en un caso particular del índice cambiaba su valor a 0 y esto hacía un bucle infinito.
Muchas gracias por la ayuda, un saludo.