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.

Casteo de argumento incorrecto en pthread_create.

Lo que estoy intentando hacer es enviar el valor entero 0 a la función para usarlo como índice de mi matriz. Pero en lugar de escribir en patients[0], escribe en patients[1]. ¿Alguna idea por qué?

Simplemente estoy haciendo un bucle desde 0 hasta 1, solo para ver si está pasando el valor 0 correctamente, pasando i(0) a la función, asignando myArr[0] a algo, pero lo asigna a myArr[1] en su lugar.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar en el bucle for que crea los hilos. En cada iteración, se pasa la dirección de la variable i como argumento a la función registration. Dado que los hilos se crean rápidamente, es posible que el valor de i ya haya incrementado cuando se ejecuta la función, lo que hace que el valor de p_num sea incorrecto.

    Para solucionar este problema, una posible solución es asignar memoria para cada índice del arreglo patients y asignar el valor de i antes de pasarlo como argumento a la función de creación de hilos:

    for (size_t i = 0; i < 1; i++) {
        int* p_num = malloc(sizeof(int));
        *p_num = i;
        patients[i].p_num = p_num; // agregar un nuevo campo a la estructura del paciente para almacenar el valor de p_num
        // crear hilos y verificar errores
    }
    

    Entonces, en la función registration, se puede recuperar el valor de p_num usando el arreglo patients:

    void* registration(void* arg) {
        int p_num = *((int*)arg); // ya no se necesita esta línea
        int index = *(patients[p_num].p_num); // recuperar el índice del arreglo de pacientes
        free(patients[p_num].p_num); // liberar la memoria asignada anteriormente
        // ...
    }
    

    Con esta modificación, el índice correcto debería escribirse en el arreglo patients.

Comments are closed.