为什么会出现此细分错误错误?

时间:2019-04-27 02:02:57

标签: c

我正在尝试使用此代码以特定方式对数组进行坐标处理,但是我总是在第25行遇到分段错误,但是我不明白为什么。

pdObjArray.push(JSON.parese(JSON.stringfy(pdObj)));

1 个答案:

答案 0 :(得分:1)

printf函数顶部添加一个bq语句:

void bq(int* v, int s, int e) {
    printf("e=%d, s=%d,  e+s+1=%d\n", e, s, e + s + 1);
    if (e + s + 1 > 2) {

运行程序时,您将看到输出;

e=9, s=0,  e+s+1=10
e=9, s=6,  e+s+1=16
e=9, s=9,  e+s+1=19
e=9, s=10,  e+s+1=20
e=9, s=11,  e+s+1=21
e=9, s=11,  e+s+1=21
e=9, s=11,  e+s+1=21
e=9, s=11,  e+s+1=21
e=9, s=11,  e+s+1=21
e=9, s=11,  e+s+1=21
e=9, s=11,  e+s+1=21
e=9, s=11,  e+s+1=21
e=9, s=11,  e+s+1=21
e=9, s=11,  e+s+1=21
...

换句话说,bq函数收敛为仅使用相同的参数bq(v, 9, 11)递归调用自身。但是由于9+11+1总是大于2,所以它处于无限递归循环中。否则称为堆栈溢出。最终结果是堆栈内存不足,程序崩溃。

我的精神力量建议这一行:

if (e+s+1 > 2){

旨在表达“如果我在v [s..e]范围内至少有两个元素”。在这种情况下,它应显示为:

if (e-s+1 > 2){

不确定程序的其余部分是否正确,但这只是一个开始。