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.

Recibiendo ‘Proceso terminado con estado -1073741819’

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct node {
    int num;
    int deg;
    struct node* nxt;
    struct node* prv;
};

typedef struct node node_t;

void push(node_t *head, node_t *last, int number, int degree) {
    node_t *newNode = (node_t*)malloc(sizeof(node_t));
    newNode->num = number;
    newNode->deg = degree;

    newNode->nxt = NULL;
    newNode->prv = NULL;

    if(head == NULL) {
        head = newNode;
        last = newNode;
    }
    else {
        last->nxt = newNode;
        newNode->prv = last;
        last = newNode;
    }
}

int main() {
    node_t *pol1 = NULL;
    node_t *pol1F = NULL;
    int dataNum, dataDeg;
    dataNum = 1;
    dataDeg = 2;
    push(pol1, pol1F, dataNum, dataDeg);
    printf("%d", pol1->num);
    free(pol1);
    free(pol1F);

    return 0;
}

Cuando intento imprimir un número desde el nodo, obtengo el estado -1073741819. En la función, por lo que sé, debería asociar head con pol1 y entrar en el primer if, considerando que head es igual a NULL. En el futuro agregaré otros nodos y crearé otro “head” para una segunda lista enlazada.
¿Cómo puedo acceder a los datos de pol1?</string.h></stdlib.h></stdio.h>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema en este código es que las variables pol1 y pol1F se pasan a la función push como punteros, pero sus valores no se actualizan dentro de la función. Esto significa que la lista enlazada no se está creando en realidad y pol1 sigue siendo NULL al intentar imprimir sus datos.

    Para solucionar esto, puedes pasar un puntero doble a la función push para head y last, o hacer que la función devuelva los nuevos nodos de la cabecera (head) y la última (last) para que sus valores puedan actualizarse en la función principal. Aquí tienes un ejemplo de la primera opción:

    void push(node_t **head, node_t **last, int number, int degree){
        node_t *newNode = (node_t*)malloc(sizeof(node_t));
        newNode->num = number;
        newNode->deg = degree;
    
        newNode->nxt = NULL;
        newNode->prv = NULL;
    
        if(*head == NULL){
            *head = newNode;
            *last = newNode;
        }
        else{       
            (*last)->nxt = newNode;
            newNode->prv = *last;
            *last = newNode;
        }
    }
    
    int main(){
        node_t *pol1 = NULL;
        node_t *pol1F=NULL;
        int dataNum, dataDeg;
        dataNum =1;
        dataDeg =2;
        push(&pol1, &pol1F, dataNum , dataDeg);
        printf("%d", pol1->num );
    
        // liberar memoria para todos los nodos
        node_t *curr = pol1;
        while(curr != NULL){
            node_t *temp = curr;
            curr = curr->nxt;
            free(temp);
        }
    
        return 0;
    }
    

    En esta versión de la función push, head y last se pasan como punteros dobles y se desreferencian con *head y *last. Esto permite que la función actualice sus valores y cree correctamente la lista enlazada. En la función principal, se pasan &pol1 y &pol1F como argumentos para pasar sus direcciones como punteros dobles. También se utiliza la función free para liberar correctamente la memoria de todos los nodos después de su uso.

    Ahora, pol1->num debería imprimir correctamente el valor del primer nodo en la lista enlazada.

Comments are closed.