相关疑难解决方法(0)

关于在C中将`void*`转换为`int`的问题

我想再次选择我的C技能.我想在不同的线程中对一个序列求和,每个线程将返回一个序列的一部分之和的指针.然而,当我试图转换void*类型值local_sumint,发生了问题.

我试图转换sum += *(int*)local_sum;,发生了一个段错误,我得到了Process finished with exit code 11.

我发现,如果我使用sum += (int)local_sum;,那就没关系.但我无法说服自己:不应该local_sum是一个void *?为什么它可以转换为int(int)local_sum

我很感激你能回答这个问题.

将每个进程的返回值相加的部分在这里:

int sum = 0;
for (int i = 0; i < NUM_THREADS; i ++) {
    void * local_sum;
    pthread_join(count_threads[i], (&local_sum));
    sum += (int)local_sum;
}
Run Code Online (Sandbox Code Playgroud)

线程的功能在这里:

void * count_thr(void *arg) {
    int terminal = ARRAY_SIZE / NUM_THREADS;
    int sum = 0;
    for (int i = 0; …
Run Code Online (Sandbox Code Playgroud)

c pointers pthreads type-conversion

10
推荐指数
2
解决办法
984
查看次数

6
推荐指数
2
解决办法
3644
查看次数

标签 统计

c ×2

pointers ×2

c++ ×1

pthreads ×1

type-conversion ×1