在算法中使用小数字时出现意外的分段错误
问题描述:
我正在使用统计算法,并且一直出现分段错误,而我无法看到它。我很确定我已经正确调用了内存。我想知道是否它可能与下溢有关,因为我只在循环的几次迭代后才得到错误。代码如下,以及我的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
第三次。我不知道为什么它前两次罚款。
谢谢!
你是否在调试器中逐步了解代码?这是第一件事。 – OldProgrammer
您可以将您的示例代码展开到[完整程序](https://stackoverflow.com/help/mcve)中,我们可以复制并粘贴,编译和运行? –
令人困惑的是,您在外循环中使用'i'作为迭代变量,并在循环中打印前5个元素。 – Barmar