运行时错误(SIGABRT)

时间:2015-07-12 15:24:20

标签: c++ runtime

我需要你对这段代码的帮助;尽管有正确的代码我仍然会遇到运行时错误。我知道SIGABRT错误是由于内存过多造成的;你能告诉我我的代码出了什么问题以及如何纠正它吗?

#include<iostream>
    #include<stdlib.h>
    #include<string>
    int count=0;
    int a[1000];
    using namespace std;
    void check(string *str,int p)
    {
        int j=0,i,k;
        int flag=0;
        char *first=new char[p];
        char *last=new char[p];
        for(int i=0;i<p;i++)
        {
            first[j]=str[i].front();
            last[j]=str[i].back();
            j++;
        }
        for(i=0;i<j;i++)
            for(k=0;k<j;k++)
            {
            if(flag>=2)
            {
                a[count++]=0;
                delete first;
                delete last;
                return;
            }
            if(first[i]==last[k])
                break;
            if(k==j-1)
                flag++;
            }
            if(flag>=2)
            {
                a[count++]=0;
                delete first;
                delete last;
                return;
            }
            if(i==j)
                a[count++]=1;
                delete first;
                delete last;
    }
    int main()
    {
        int t,p;
        cin>>t;
        for(int i=0;i<t;i++)
        {
            cin>>p;
            string *str=new string[p];
            for(int i=0;i<p;i++)
                cin>>str[i];
            check(str,p);
            delete str;
        }
        for(int i=0;i<count;i++)
            if(a[i]==0)
                cout<<"\nThe door cannot be opened.";
            else
                cout<<"\nOrdering is possible.";
        return 0;
    }

1 个答案:

答案 0 :(得分:0)

我相信你的代码中存在一个主要问题。您分配数组但删除单个指针。对于FROM com.strutsProject.dto.EventClubTb as C join C.achievementsTb as A ,应使用FROM com.strutsProject.dto.EventClubTb as C, com.strutsProject.dto.AchievementsTb as A where A.EVENTNAME=C.EVENTNAME 代替new []。我相信它应该解决错误。