我不确定如何调试此错误,因为它可能是由很多事情引起的。我能够做的是注释掉程序的各个部分并重复编译它,以便跟踪程序的哪个部分产生错误,我认为这部分会产生错误:
这里我想创建一个帖子:
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;
}
答案 0 :(得分:2)
问题是您将int
传递给该函数(已转换为void *
),然后尝试将其作为int *
读取。
此外,您正在尝试free
未从malloc
和家人返回的内容。
传递int
值的地址,并在功能中不要free
。此外,没有必要在void *
和任何非函数指针之间进行转换。
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);