我想再次选择我的C技能.我想在不同的线程中对一个序列求和,每个线程将返回一个序列的一部分之和的指针.然而,当我试图转换void*类型值local_sum来int,发生了问题.
我试图转换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和/或C++中:将int转换为void指针并再次返回int是否安全?
基于问题" C++:将指针转换为int并稍后再返回指针是否安全? ".