Cita:
Iniciado por luface2000 Hola,
he puesto la variable tAlumno palmera dentro del main y creo que tienes razón, es más purista pero funciona.
Entiendo que creas un tipo tAlumnos de struct y que albergará una tabla de struct de 3 posiciones en el caso de código que muestro. En la práctica ira la secuencia 0,1,2, es decir tres posiciones. El tema es que cuando ejecutas el programa por pantalla de la consola hace un printf de todos los casos. El tema es que no entiendo como hace la secuencia la tabla. Si es tNino datos[3] debería ser 0,1,2 pero en realidad hace 0,1,2,3. Es lo que no entiendo. Por ejemplo, el que código que pego a continuación
para tNino datos[4] no da error y son 5 datos, pero si pongo tNino datos[3] el mensaje que muestra en consola es,
Código:
Hola Mundo
Los datos son: ID=0 Nombre=Laura Año Nacimiento=2000 y Edad=10
Esto imprime el primer caracter de Laura que es = L
Los datos son: ID=1 Nombre=Pablo Año Nacimiento=2003 y Edad=8
Los datos son: ID=2 Nombre=Pili Año Nacimiento=1972 y Edad=38
Los datos son: ID=3 Nombre=Lorenzo Año Nacimiento=1968 y Edad=42
Los datos son: ID=4 Nombre=Lorenzo Año Nacimiento=1968 y Edad=42
Segmentation fault
------------------
(program exited with code: 0)
Press return to continue
con lo que rebosa la tabla confirmando lo que digo. ¿Entonces como maneja el inicio y final de esa tabla? Lo siento, es un ladrillo de pregunta.
Gracias.
segmentation fault significa
violacion de acceso esto quiere decir que estas escribiendo en un area restringida, que no tienes los permisos, por que seguramente ya habra algo escrito ahi.
si creas 3 datos: datos[3]
reservas tantos bytes por 3 (por que son 3 datos)
y si asignas valores a datos 5 por ejemplo_: datos[5].nombre
estas escribiendo en un area que no has reservado pero te deja por que existe.
x0 x1 x2 x3 x4 x5 x6 ..... (espacios de memoria)
_______ (reservas 3)
dato es un puntero al primer elemento. si pones dato[1] es lo mismo que apuntar a dato[0] + 1 , es decir estas escribiendo en el siguiente espacio de memoria.
si escribes en x5 , aunque no lo hayas reservado te deja pero por que se da el caso de que esta vacio, tambien se podria dar el caso de que estuviera ocupado (segmentation fault)