我需要您關於此代碼的幫助;儘管擁有正確的代碼,但我仍然遇到了運行時錯誤。我知道SIGABRT錯誤是由於內存過多;你們可以告訴我我的代碼出錯了嗎?如何糾正?運行時錯誤(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;
}
SIGABRT並不專指「過度使用內存」。你的代碼相當複雜,並且完全沒有指出你用來重現問題的輸入字符串是什麼[這可能會影響你的結果是什麼] –
代碼的解決方案是分離字符串的最後一個字符和第一個字符作爲輸入。然後取消所有在兩個數組中首先和最後一個常見的字符,並且如果沒有公共字符,則該標誌遞增,這將返回incase標誌爲大於2 – navroze