Runtime Error:Segmentation fault 怎么找出有关问题所在
Runtime Error:Segmentation fault 如何找出问题所在
Runtime Error:Segmentation fault
辅助解释:
Segmentation fault:段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存区域
oj时出现上述错误,在VS2013中正常运行,也没有warning,不知问题在哪里或者可能在哪里?
------解决思路----------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
------解决思路----------------------
long long int ip::search(long long int V)
{
if (long long int x=dich(0, n-1,V)) return x;
else return -1;
}
如果查出来ID正好是0,楼主岂不是直接返回-1?
虽然这个不是楼主想说的那个问题吧,但是我看到了不说出来也痒痒
------解决思路----------------------
段错误,这个应该是linux下遇到的吧?
难道没有coredump嘛?用gdb可以详细定位问题行啊
Runtime Error:Segmentation fault
辅助解释:
Segmentation fault:段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存区域
oj时出现上述错误,在VS2013中正常运行,也没有warning,不知问题在哪里或者可能在哪里?
#include <iostream>
#include <vector>
using namespace std;
class ip
{
public:
int m;
ip() :id(3){}
void save(); //一边插入一边排序
long long int search(long long int V); //找V所在ID
private:
int T, n;
vector<vector<long long int> > id;
long long int dich(int left, int right,long long int V); //二分法定位
};
void ip::save()
{
cin >> T >> n;
long long int a, b, Id;
int j;
for (int i = 0; i < n; ++i)
{
cin >> a >> b >> Id;
id[0].push_back(a);
id[1].push_back(b);
id[2].push_back(Id);
for (j = i; j >0 && id[0][j-1]>a; --j)
{
id[0][j] = id[0][j - 1];
id[1][j] = id[1][j - 1];
id[2][j] = id[2][j - 1];
}
id[0][j] = a;
id[1][j] = b;
id[2][j] = Id;
}
cin >> m;
}
long long int ip::search(long long int V)
{
if (long long int x=dich(0, n-1,V)) return x;
else return -1;
}
long long int ip::dich(int left, int right,long long int V)
{
if (V<id[0][left] || V > id[1][right])
return -1;
int mid;
mid = (left + right) / 2;
if (V >= id[0][mid] && V <= id[1][mid])
return id[2][mid];
else if (V < id[0][mid])
return dich(left, mid, V);
else
return dich(mid + 1, right, V);
}
int main()
{
ip ip_s;
long long int v;
ip_s.save();
for (int i = ip_s.m; i > 0; --i)
{
cin >> v;
cout << ip_s.search(v) << endl;
}
return 0;
}
------解决思路----------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
------解决思路----------------------
long long int ip::search(long long int V)
{
if (long long int x=dich(0, n-1,V)) return x;
else return -1;
}
如果查出来ID正好是0,楼主岂不是直接返回-1?
虽然这个不是楼主想说的那个问题吧,但是我看到了不说出来也痒痒
------解决思路----------------------
段错误,这个应该是linux下遇到的吧?
难道没有coredump嘛?用gdb可以详细定位问题行啊