Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: David8 en 30 Abril 2014, 13:24 pm



Título: Duda con estructuras C
Publicado por: David8 en 30 Abril 2014, 13:24 pm
Si por ejemplo tengo la siguiente estructura de datos:

Código:
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:

Código:
struct nombre{
   // código
};

struct nombre *puntero;
puntero = (struct nombre*)malloc(N * sizeof(nombre));

Espero que me puedan ayudar. Un saludo.


Título: Re: Duda con estructuras C
Publicado por: eferion en 30 Abril 2014, 13:35 pm
"nombre" como tal no es nada... el identificador real es "struct nombre"

Código
  1. puntero = (struct nombre*)malloc(N * sizeof(struct nombre));


Título: Re: Duda con estructuras C
Publicado por: 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:
Código
  1. puntero = malloc(N * sizeof *puntero);
Evitas indicar el tipo apuntado (lo que reduce errores lógicos).

Un saludo


Título: Re: Duda con estructuras C
Publicado por: David8 en 30 Abril 2014, 17:21 pm
Solo agregar que en C la conversión explicita no es necesaria y si utilizas "sizeof *puntero" en la llamada a malloc:
Código
  1. 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:

Código:
#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
Código:
struct jugador *Jugador;

Jugador = malloc(5 * sizeof *Jugador);   // definimos 5 jugadores

Y no sé cual puede ser el fallo.

Un saludo



Solo agregar que en C la conversión explicita no es necesaria y si utilizas "sizeof *puntero" en la llamada a malloc:
Código
  1. 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


Título: Re: Duda con estructuras C
Publicado por: 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


Título: Re: Duda con estructuras C
Publicado por: David8 en 2 Mayo 2014, 18:25 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:

Código:
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

Código:
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


Título: Re: Duda con estructuras C
Publicado por: 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


Título: Re: Duda con estructuras C
Publicado por: David8 en 5 Mayo 2014, 12:42 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.