C - 指针问题和void方法问题

时间:2013-05-03 22:09:35

标签: c pointers pthreads void

我在C中遇到以下代码的问题。基本上我想创建两个线程并给它们都是“ergebnis”的整数值。在此之后,线程必须单独计算该值并打印它们各自的结果。

编译时我得到了这个错误:

3.2.c: In function ‘erhoehenumeins’:
3.2.c:10:13: warning: dereferencing ‘void *’ pointer [enabled by default]
3.2.c:10:13: error: void value not ignored as it ought to be
3.2.c: In function ‘verdoppeln’:
3.2.c:20:18: error: invalid operands to binary * (have ‘void *’ and ‘int’)   

代码:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

void *erhoehenumeins(void * dummy) {
    printf("Thread erhoehenumeins() wurde gestartet\n");
    int temp;
    temp= dummy+1;
    printf("Thread erhoehenumeins() wurde beendet\n");
    printf("Ergebnis=%d\n",temp);
}
void *verdoppeln(void * dummy) {
    printf("Thread verdoppeln() wurde gestartet\n");
    int temp=dummy*2;
    printf("Thread verdoppeln() wurde beendet\n");
    printf("Ergebnis=%d\n",temp);
}

int main() {
    int ergebnis=3;
    pthread_t thread1, thread2;
    // Thread 1 erzeugen
    pthread_create( &thread1, NULL, &erhoehenumeins, &ergebnis );

    // Thread 2 erzeugen
    pthread_create( &thread2, NULL, &verdoppeln, &ergebnis );

    // Main-Thread wartet auf beide Threads.
    pthread_join( thread1, NULL );
    pthread_join( thread2, NULL );
    printf("\nHaupt-Thread main() wurde beendet\n");
    exit(0);
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

这样做:

void * erhoehenumeins(void * dummy)
{
    int * p = (int *) dummy;
    ++*p;

    return NULL;
}

int ergebnis = 3;
pthread_create(&thread1, NULL, &erhoehenumeins, &ergebnis);

这当然是未定义的行为并且完全被破坏了,但它现在应该这样做。

答案 1 :(得分:1)

在第

int temp=dummy*2;

dummyvoid * - 编译器不能将其乘以2.

也许你应该这样做&#34;

int temp = (*(int *)dummy)*2;