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.

Intercambiar arreglos en una lista enlazada

Entonces, tengo que intercambiar los datos de dos nodos.
Aquí está la función que creé:

void swap(struct st* a, struct st* b)
{
    struct st* temp;

    temp->lname = a->lname; //lname es un arreglo de caracteres
    a->lname = b->lname;
    b->lname = temp->lname;

    temp->marks = a->marks; //marks es un arreglo de números decimales
    a->marks = b->marks;
    b->marks = temp->marks;
}

Entonces, no entiendo por qué ocurre un error.
El error es el siguiente: E0137 la expresión debe ser un lvalue modificable

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error en la función anterior ocurre porque el puntero ‘temp’ no ha sido asignado ninguna asignación de memoria antes de ser utilizado para acceder a las variables lname y marks. Esto provoca un intento de acceder a una ubicación de memoria desconocida y causa el error.

    Para resolver el error, se debe asignar una asignación de memoria a la variable puntero ‘temp’ antes de que se utilice para acceder a las variables lname y marks.

    Aquí está el código de función corregido:

    void swap(struct st* a, struct st* b)
    {
        struct st temp;
    
        strcpy(temp.lname, a->lname);
        strcpy(a->lname, b->lname);
        strcpy(b->lname, temp.lname);
    
        temp.marks = a->marks;
        a->marks = b->marks;
        b->marks = temp.marks;
    }
    

    En el código corregido, se crea una variable temporal ‘struct st’ y se asigna memoria para ella. Las variables ‘lname’ y ‘marks’ se acceden a través de esta variable temporal antes de intercambiarlas con sus respectivas contrapartes en los nodos señalados por ‘a’ y ‘b’. Esto asegura que se resuelva el error y que la función se pueda usar para intercambiar datos de dos nodos.

Comments are closed.