我的C代码不能用,但另一个例子,和我类似的东西,却能用。为什么会这样?

问题描述 投票:0回答:1

我的代码不能用... 但另一个和我的代码相似的例子却能用。我该如何解决?

好像是 pthread_join() 像我的代码一样在内部改变整数值。但我的不工作。

谁能帮我解决?

#include <stdio.h>

void test(void **temp) {
    int foo = 3;
    *temp = foo;
}

int main(void) {
    int temp;

    test((void **)&temp);
    printf("%d\n", temp);

    return 0;
}

pthread_join 举个例子。

#include <pthread.h>
#include <stdlib.h>

void *test(void *data) {
    int i;
    int a = *(int *)data;
    for (i = 0; i < 10; i++) {
        printf("%d\n", i * a);
    }
}

int main() {
    int a = 100;
    pthread_t thread_t;
    int status;

    if (pthread_create(&thread_t, NULL, test, (void *)&a) < 0) {
        perror("thread create error:");
        exit(0);
    }

    pthread_join(thread_t, (void **)&status);
    printf("Thread End %d\n", status);
    return 1;
}
c pointers pthread-join
1个回答
1
投票

但我的不工作...

这句话:

pthread_join(thread_t, (void **)&status);

赋予状态 返回 你的线程函数的值。但你的函数并没有返回 任何所以你得到的是垃圾。

为了解决这个问题,让你的 test 函数返回一些东西。

P.S. 请开启编译器警告(-Wall, -Wextra)--编译器应该已经警告过你这个错误了。

P.P.S 请不要这样命名你的变量。thread_t -- the _t 代表 类型thead_t 一个类型。


0
投票

你试图把temp变成两个void指针(void**),而实际上你只有一个指向int temp的指针。只要返回指针值,你就可以在类似的pthread例子中使用这个方法。

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

void *test(void *temp) {
    int *ptr = (int*)malloc(sizeof(int));
    *ptr = 3;
    return ptr;
}

int main(int argc, char *argv[]) {
    int *temp = (int*)test(nullptr);
    printf("%d\n", *temp);
    free(temp);
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.