es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Estoy utilizando un conjunto de arrays dentro de una estructura y mi programa se comporta de manera extraña.

Estoy tratando de crear un pequeño organizador de listas de reproducción dentro de un programa C. Y logré crear este código. El propósito del código es crear una matriz de la estructura track_ dentro de la estructura listOfSongs y llenarla mediante un ciclo for. Obtuve un error de segmentación cuando la cantidad de canciones es menor a 6. Pero si la cantidad de canciones es <=6 el programa se comporta normalmente y funciona correctamente. Soy bastante nuevo en C, así que no puedo encontrar el error. ¿Alguien puede ayudarme?
Gracias <3

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que la estructura track_t contiene punteros a char (nazev, autor y album), pero no se inicializan antes de ser utilizados en la función scanf. Esto resulta en un comportamiento indefinido, que puede causar una violación de segmento u otro comportamiento inesperado, dependiendo de los valores de entrada proporcionados.

    Para solucionar este problema, se debe asignar memoria para cada puntero antes de utilizar scanf. Por ejemplo:

    for(int i = 0; i < countOfSongs; i++)
    {
        sez->track[i] = malloc(sizeof(struct track_t));
        sez->track[i]->nazev = malloc(sizeof(char) * MAX_NAME_LENGTH); // MAX_NAME_LENGTH es la longitud máxima de la cadena de entrada
        sez->track[i]->autor = malloc(sizeof(char) * MAX_NAME_LENGTH);
        sez->track[i]->album = malloc(sizeof(char) * MAX_NAME_LENGTH);
    
        printf("%d\n", i);
        scanf("%s", sez->track[i]->nazev);
        printf("%s\n", sez->track[i]->nazev);
    }
    

    Este código asigna memoria para cada puntero y luego se guarda la cadena de entrada en la memoria asignada utilizando scanf. Esto debería evitar cualquier violación de segmento o comportamiento indefinido causado por el uso de punteros no inicializados.

Comments are closed.