SIGSEGV 提交

Posted

技术标签:

【中文标题】SIGSEGV 提交【英文标题】:SIGSEGV on Submission 【发布时间】:2011-12-25 15:51:25 【问题描述】:

我正在解决问题 https://www.spoj.pl/problems/ACPC11A/

这是我的代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<vector>

using namespace std;

int main()

int tc,i,n;
scanf("%d",&tc);
while(tc--)

    vector<string> v1,v2;
    string str,w;
    scanf("%d",&n);
    int flag=0;
    for(i=0;i<n;i++)
    
        cin>>str;
        if(str[0]!='#')
        
            flag=1;
            w=str;
        
        else if(flag==0)
        
            v1.push_back(str);
        
        else
            v2.push_back(str);
    
    //print v2-->w-->v1
    for(i=0;i<v2.size();i++)
    
        cout<<v2[i]<<" ";
    
    if(w!="")
    cout<<w<<" ";
    for(i=0;i<v1.size()-1;i++)
        cout<<v1[i]<<" ";
    cout<<v1[v1.size()-1]<<endl;
    v1.clear();v2.clear();str.clear();w.clear();

return 0;

我得到了示例测试用例的正确输出...但是在提交时我的代码给出了分段错误。

我的逻辑很简单.. 我拿了 2 个向量 1 用于在英语单词到达之前存储单词(v1),另一个用于在英语单词到达之后存储世界(v2) 之后我打印 v2 的内容,然后是 word,然后是 v1 的内容。

请帮助我理解为什么这段代码会出现分段错误。

【问题讨论】:

不信任的网站.......无法打开 【参考方案1】:

别打扰伙计们……我弄错了

错误在for(i=0;i&lt;v1.size()-1;i++) 行中

v1.size()0 时,因为 size() 返回无符号值...因此0-1 将是非常大的值,因此 SIGSEGV

【讨论】:

以上是关于SIGSEGV 提交的主要内容,如果未能解决你的问题,请参考以下文章

SIGBUS 和 SIGSEGV

如何“避免” SIGSEGV?

关于SIGSEGV错误及处理方法

gdb 跟踪 SIGSEGV 异常

IOSurfaceClientGetPixelFormat 处的 SIGSEGV(SEGV_ACCERR)

SIGSEGV:程序不按顺序执行