통계 알고리즘을 사용하여 계속 세분화 오류가 발생했으며 계속 볼 수 없습니다. 나는 꽤 정확하게 calloc'd 메모리를 가지고 있다고 확신한다. 루프의 반복을 몇 번 수행 한 후에 만 오류가 발생하기 때문에 언더 플로우와 관련이 있는지 궁금합니다. 아래 코드는 내 printf
과 함께 디버깅 용입니다. 미안 구문이 약간 혼란 스러울 경우 저널 간행물을 따라 가고 있습니다. 다음알고리즘의 작은 숫자로 작업 할 때 예기치 않은 세그먼트 오류가 발생했습니다.
// *** n and m defined previously
float *aux_arr = calloc(n, sizeof(float));
if (aux_arr == NULL) {
printf("calloc failed");
}
int j;
int j0 = 1;
int j1 = 1;
aux_arr[1] = 1;
for (size_t i = 0; i < n - 1; i++) {
printf("\nOUTER\n");
j1 += 1;
printf("i: %zu\n", i);
printf("j1: %i\n", j1);
for (j = j1; j >= j0; j--) {
printf("\nINNER\n");
printf("j: %i\n", j);
printf("j1: %i\n", j1);
printf("j0: %i\n", j0);
// print first 5 elements of my aux_arr
for (int i = 0; i < 5; i++) {
printf("%f\n", aux_arr[i]);
}
aux_arr[j] = (j/m) * (aux_arr[j]) + (1 + (1/m) - (j/m)) * (aux_arr[j - 1]);
if (aux_arr[j] < (1.0 * pow(10, -20))) {
aux_arr = 0;
if (j == j1) {
j1 -= -1;
}
if (j == j0) {
j0 += 1;
}
}
}
}
출력 :
OUTER
i: 0
j1: 2
INNER
j: 2
j1: 2
j0: 1
0.000000
1.000000
0.000000
0.000000
0.000000
INNER
j: 1
j1: 2
j0: 1
0.000000
1.000000
1.000000
0.000000
0.000000
OUTER
i: 1
j1: 3
INNER
j: 3
j1: 3
j0: 2
Segmentation fault: 11
당신은 내가 액세스하려고 할 때 문제가 오는 것을 볼 수 있습니다 내 aux_arr
세 번째 시간. 처음 2 번 제대로 작동하는 이유는 확실하지 않습니다.
감사합니다.
디버거에서 코드를 밟았습니까? 그것은 할 첫 번째 일입니다. – OldProgrammer
샘플 코드를 복사하여 붙여 넣고 컴파일하고 실행할 수있는 [전체 프로그램] (https://stackoverflow.com/help/mcve)으로 확장 할 수 있습니까? –
외부 루프에서 반복 변수로 'i'를 사용하고 처음 5 개 요소를 인쇄하는 루프를 사용하는 것이 혼란 스럽습니다. – Barmar