많은 문제로 인해이 오류를 디버깅하는 방법을 모르겠습니다. 내가 할 수 있었던 것은 프로그램의 일부를 주석 처리하고 프로그램의 어느 부분에서 오류가 발생했는지 추적하기 위해 반복적으로 컴파일하는 것입니다.이 부분은 오류를 생성합니다 :스레드를 만들 때 세그먼트 오류 (코어 덤프) 오류가 발생했습니다.
여기 스레드를 만들고 싶습니다. : 어쩌면 그것은 또한 스레드가 생성 될 때 호출되는 strikeMultiples 기능으로 인해 발생할 수
int j = 0; //not the actual value, just showing that j is of type int
pthread_create(&thread_id, NULL, strikeMultiples, (void*)j);
는 :
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;
}
, 따라서 스레드 PROC에서'primej' 이후 역 참조의 형성은 잘못이다. 'int j = (int) prime;'은 현실에 더 가깝지만 여전히 "정확하지"않습니다. 올바르게 실행하려면, proc의'j' inbound와'j'는'intptr_t' 또는'uintptr_t'이어야하고'free'는 관계없이 제거되어야합니다. 즉, 모든 종류의 추측입니다. 우리는'j'가 첫 번째 스 니펫에 있거나 그 출처가 어디인지 알지 못합니다. – WhozCraig