Extraños porque a veces va y otras no.
Estoy trabajando con memoria dinamica (stdlibm.h) que como sabreis dispone de la funcion calloc. Pues bien:
defino una estructura:
typedef struct{
bool tipo;
int var;
char nombre[20];
} opts;
ahora defino otra que tiene, entre otros, un miembro que es un puntero a la anterior (para hacer un array)
typedef struct{
int n_ops;
opts *opciones;
} menu;
y ahora hago otra definicion. un puntero a la estructura principal para hacer un array.
menu *mimenu;
reservo memoria para un array de 10 elementos de menu:
mimenu=calloc(10,sizeof(menu));
y hago un bucle que rellena cada elemento, reservando tambien espacio para las opciones del menu (20).
for (l=0;l<10;l++)
{
mimenu[l].opciones=calloc(20,sizeof(opts));
for (k=0;k<20;k++)
strcpy(mimenu[l].opciones[k].nombre,"HOLA");
}
He obviado las comprobaciones de que calloc retorna NULL si no hay mas memoria para haceros mas legible el codigo. El codigo es un simple ejemplo que como vereis no sirve para nada.
Pues bien. En ningun momento da error. Hay memoria suficiente, pero observando el espacio de las estructuras con el debugger, una vez rellenadas, se sobreescriben unas encima de otras pero solo a partir de un determinado numero de elementos. Es decir, si en lugar de reservar 20 elementos para opciones, reservo 10, funciona correctamente. Llega un punto en que si aumento este numero, a pesar de haber memoria suficiente y no retornar nunca NULL en calloc, se machacan datos de unas en otras.
¿¿¿¿¿¿ POR QUE ?????
gracias!!!!