C-pthread返回意外结果

时间:2019-02-01 21:48:59

标签: c pthreads

我试图弄清C中pthread的问题。虽然我的第二个线程正确返回了值,但第一个线程只给了我一个内存地址。

代码应执行以下操作:

创建2个线程,从控制台计算给定数字的阶乘和指数值。

阶乘被编码为函数,指数计算器位于主代码中。

感谢您的帮助!

#include <pthread.h>
    #include <stdio.h>

void *fac_x(void *x_void_ptr)
{
    int *x_ptr = (int *)x_void_ptr;
    int counter = *x_ptr;

    for (int i = 1; i  < counter ; i++) {
        *x_ptr *= i;
    }
    printf("x factorising finished\n");
    return NULL;
}
int main()
{
    int x,y, counter;
    printf("Enter an integer: ");
    scanf("%d",&x);
    y = x;
    counter = y;

    printf("Input = %d\n",x);

    pthread_t fac_x_thread;

    if(pthread_create(&fac_x_thread, NULL, fac_x, &x)) {

        fprintf(stderr, "Error creating thread\n");
        return 1;
    }
    while (counter != 0) {
        y *= y;
        counter--;
    }
    if(pthread_join(fac_x_thread, NULL)) {
        fprintf(stderr, "Error joining thread\n");
        return 2;
    }
    printf("Factorial: %d \nExponential: %d\n", x, y);

    return 0;
}

1 个答案:

答案 0 :(得分:2)

  

第一个只是给我(我想)一个内存地址。

这不是地址,您(试图)计算出一个非常大的值,很快就会溢出

对于3,它已经是6561(3 * 3 = 9、9 * 9 = 81,最后81 * 81 = 6561)

对于4,该值在32位中太大2 ^ 32(4 * 4 = 16,16 * 16 = 256,256 * 256 = 65536,最后65536 * 65536 = 4294967296 = 2 ^ 32)

对于5而言,值为23283064365386962890625 = 0x4EE2D6D415B85ACEF81> 2 ^ 75对于64b来说太大了!