首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上载输入时出现SIGSEGV错误

上载输入时出现SIGSEGV错误
EN

Stack Overflow用户
提问于 2013-05-16 06:05:06
回答 2查看 108关注 0票数 1

我试着用ideone来解决the needle in the haystack problem,但是我得到了一个SIGSEGV。

这是我的代码:

代码语言:javascript
复制
    //start
    #include<cstring>
    #include<cstdio>
    #include<vector> 
    using namespace std;


    int *overlap;
    char *pattern;
   //used Knuth morris prat algo
   void calcoverlap()
   {
    overlap[0] = 0;
    unsigned int length,i,len;  
    length=strlen(pattern);

    while(i<length)
    {
        if (pattern[i] == pattern[len])
        {
            len++;
            overlap[i] = len;
            i++;
        }
        else
        {
            if (len != 0)
            {
                len = overlap[len-1];
            }
            else
            {
                overlap[i++] = 0;
            }
        }

    }
   }
    //this is final function for pattern matching
    vector< int > patternmatching(int m)
{
vector< int > V;
int i = 0, j = 0;
char ch;
while(1)
{
ch = getchar();
if(ch == '\n') break;
while(1)
{
if(ch == pattern[j])
{
j++;
if(j == m)
{
V.push_back(i-m+1);
j = overlap[j];
}
break;
}
else if(j == 0) break;
else j = overlap[j];
}
i++;
}
    return V;
    }




   int main()
   {
        int n,i,sz;
        vector<int> V;
        while(scanf("%d",&n)==1)
        {   
            gets(pattern);
            calcoverlap();
            V=patternmatching(n);
            sz = V.size();
           for(i=0; i < sz; i++)
            printf("%d\n",V[i]);
            if(!sz) printf("\n");
            delete[] pattern;
            delete[] overlap;
        }
         return 0;
        }    

有人可以解释一下,为什么我得到这个错误,只有当上传输入,而这个程序正常运行良好和花哨。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-16 06:10:17

使用调试器可以很容易地隔离段错误(包括sigsegv)。

如果您在Unix上进行开发,请在调试器中运行代码。

  1. 使用-g标志编译你的代码。
  2. 在gdb中运行你的代码,如下所示- gdb a.out (或程序名)
  3. Run:gdb程序将在你的段错误时崩溃。它应该会显示它发生的确切行号。您可能需要键入btwhere才能追溯。

在IDE中,这甚至更容易。通常,您可以通过查找调试符号来进行调试,该符号通常以图形方式表示为bug (例如Eclipse)。我不熟悉您使用的IDE,所以如果您遇到问题,也许有人可以发布一个特定于该IDE的答案。

票数 2
EN

Stack Overflow用户

发布于 2013-05-20 04:55:21

正如Dav在注释中建议的那样,您在get中使用了一个未初始化的指针(模式),因此出现了segfault。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16575770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档