我不确定如何调试此错误,因为它可能是由很多原因引起的。我能做的是注释掉程序的某些部分,并反复编译以跟踪程序的哪一部分产生了错误,我认为这部分产生了错误:
在这里我想创建一个线程:
int j = 0; //not the actual value, just showing that j is of type int
pthread_create(&thread_id, NULL, strikeMultiples, (void*)j);
也许也可能是由于strikeMultiples函数引起的,该函数在创建线程时被调用:
static void* strikeMultiples(void* prime) {
int * primej = (int *) prime;
int j = *primej;
free (prime);
int k;
for (k = 2; j * k <= NROF_SIEVE; k++) {
BIT_CLEAR(buffer[(j * k)/64], (j * k)%64);
}
return NULL;
}
问题是您将an传递int
给该函数(传递给void *
),然后尝试将其读取为int *
。
另外,您正在尝试free
未从malloc
和家人那里退回的东西。
传递int
值的地址,但不要free
在函数中传递它。同样,也不必在avoid *
和任何非函数指针之间进行强制转换。
static void* strikeMultiples(void* prime) {
int *primej = prime;
int j = *primej;
int k;
for (k = 2; j * k <= NROF_SIEVE; k++) {
BIT_CLEAR(buffer[(j * k)/64], (j * k)%64);
}
return NULL;
}
...
pthread_create(&thread_id, NULL, strikeMultiples, &j);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句