[英]Segmentation fault 11 in a Practice
我正在为我的Algorithms类进行练习,并且遇到了segmentation fault:11
line 58
segmentation fault:11
,我不知道为什么,我的意思是,我知道对函数“ localiza”的第一个调用工作正常,但是第二个,
*i2 = localiza(v2, 0, v2.size())*
引起了细分错误,我不知道为什么。 该算法用于查找索引,使v[i] = i
。 在main()
,如果i1
和i2
为!= 0
意味着v1[i1] = i1
和v2[i2] = i2
。 希望您能帮助我进行这项练习。 非常感谢你们!!
#include <iostream>
#include <vector>
using namespace std;
int localiza(vector <int> v, int primero, int ultimo){
int i = 0;
int izq = 0, der = 0;
if(primero == ultimo)
if (v[primero] == primero)
return primero;
else
return 0; // No existe el indice buscado
else{
i = (primero + ultimo) / 2; // Division entera
if(v[i] == i)
return i;
else if(v[i] > i){
izq = localiza(v, primero, i-1); // Primera mitad
if(v[i] <= ultimo)
der = localiza(v, v[i], ultimo);
else
der = 0;
if(izq != 0)
return izq;
else if(der != 0)
return der;
else
return 0;
}
else{
der = localiza(v, i+1, ultimo);
if(primero <= v[i])
izq = localiza(v, primero, v[i]);
else
izq = 0;
if(der != 0)
return der;
else if(izq != 0)
return izq;
else
return 0;
}
}
}
int main(){
vector <int> v1 = {1, 2, 4, 5, 7, 9, 11};
vector <int> v2 = {1, 2, 3, 4, 5, 6, 7, 7, 15, 16};
int i1 = localiza(v1, 0, v1.size());
int i2 = localiza(v2, 0, v2.size());
if(i1 != 0)
cout << "Si existe el indice indicado para el primer vector";
else
cout << "No existe el indice indicado para el primer vector";
if(i2 != 0)
cout << "Si existe el indice indicado para el segundo vector";
else
cout << "No existe el indice indicado para el segundo vector";
return 0;
}
您使用[]
访问v
导致超出范围的访问。 由于将矢量的大小作为潜在的上限传递,因此腐烂开始了。
如果使用v.at(i)
而不是v[i]
则要求C ++在这种情况下引发异常,而不是未定义程序行为。 然后,您将能够解决问题,原因是明确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.