我正在尝试使用此代码以特定方式对数组进行坐标处理,但是我总是在第25行遇到分段错误,但是我不明白为什么。
pdObjArray.push(JSON.parese(JSON.stringfy(pdObj)));
答案 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){
不确定程序的其余部分是否正确,但这只是一个开始。