Hola maestros, tengo un pequeño problema al momento de agregar elementos a mi lista enlazada pues me tira errores de memoria, yo recervo la memoria para la estructura pero creo que el problema esta en que dentro de ella tengo strings de largo variable y por ende la memoria que se pide no es suficiente pero la verdad de las cosas es que no se con certesa cual es el problema, les dejo parte de mi código para ver si me pueden ayudar a solucionarlo...
Código:
//Se define la estructura Auto
typedef struct Auto {
int codigo; //Código del auto
char *marca; //Marca del auto
char *modelo; //Modelo del auto
char *color; //Color del auto
char patente[6]; //Patente del auto
int anho; //Año del auto
int n_ejem_disp; //Número de ejemplares disponibles para el arriendo
int n_ejemplares; //Número de ejemplares del auto
struct Auto *next;
}Auto;
struct Auto *NuevoAuto;
struct Auto *PrimerAuto;
struct Auto *RecorreAuto;
struct Auto *AnteriorAuto;
void Agregar(char *tipo)
{
char mar[0];
char mod[0];
char col[0];
char pat[6];
int cod;
int an;
int n_ejem;
if (strcmp(tipo,"Auto") == 0)
{
printf("\nEscriba la marca del Auto: ");
scanf(" %[^\n]", mar);
printf("\nEscriba el modelo del Auto: ");
scanf(" %[^\n]", mod);
printf("\nEscriba el color del Auto: ");
scanf(" %[^\n]", col);
printf("\nEscriba la patente del Auto (en formato XX-XXXX): ");
scanf(" %[^\n]", pat);
printf("\nEscriba el a%co del Auto: ", 164);
scanf("%d", &an);
printf("\nEscriba el n%cmero de ejemplares del Auto: ", 163);
scanf("%d", &n_ejem);
NuevoAuto = (Auto *)malloc(sizeof(Auto));
NuevoAuto->marca = (char *)malloc(sizeof(char)*strlen(mar));
NuevoAuto->modelo = (char *)malloc(sizeof(char)*strlen(mod));
NuevoAuto->color = (char *)malloc(sizeof(char)*strlen(col));
NuevoAuto->codigo = CrearCodigo();
strcpy(NuevoAuto->marca,mar);
strcpy(NuevoAuto->modelo,mod);
strcpy(NuevoAuto->color,col);
strcpy(NuevoAuto->patente,pat);
NuevoAuto->anho = an;
NuevoAuto->n_ejem_disp = n_ejem;
NuevoAuto->n_ejemplares = n_ejem;
NuevoAuto->next = NULL;
if (PrimerAuto == NULL)
{
PrimerAuto = NuevoAuto;
RecorreAuto = NuevoAuto;
}
else
{
RecorreAuto->next = NuevoAuto;
}
RecorreAuto = NuevoAuto;
free(mar);
free(mod);
free(col);
printf("\nAuto agregado correctamente.\n\n");
}
}
Les agradeceria si me pudieran ayudar.... Saludos y gracias de antemano