Я получаю ошибку сегментации в шаблоне подстановочного шаблона в интервью. И я искал помощь, чтобы не получить ответа. Я использую DP для решения задачи. Пожалуйста, помогите мне выяснить причину Segfault Ссылка на проблему - https://www.interviewbit.com/problems/regular-expression-match/Ошибка сегментации в шаблоне совпадения шаблонов
Вот мое решение становится Segfault в C++.
int Solution::isMatch(const string &s, const string &p) {
int n=s.size(),m=p.size();
bool dp[n+1][m+1];
for(int i=0;i<=n;i++)for(int j=0;j<=m;j++)dp[i][j]=false;
dp[0][0]=true;
for(int j=1;j<=m;j++)
if(p[j-1]=='*')dp[0][j]=dp[0][j-1];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(s[i-1]==p[j-1] || p[j-1]=='?')dp[i][j]=dp[i-1][j-1];
else if(p[j-1]=='*')
{
int v1=dp[i][j-1],v2=0;// Not Using
v2=(dp[i-1][j]|dp[i][j-1]);
dp[i][j]=(v1|v2);
}
else dp[i][j]=false;
}
}
return dp[n][m];
}
похоже, что вы получаете его во время выполнения, каковы строковые значения, которые вызывают ошибку? –
'bool dp [n + 1] [m + 1];' Это не законный C++, массивы в C++ должны быть объявлены с использованием выражений compile-time в виде числа записей. Вместо этого используйте 'std :: vector', а не только для того, чтобы сделать его стандартным C++, но чтобы помочь вам в отладке вашей проблемы, поскольку' vector' имеет функцию 'at()', которая генерирует исключение, если вы выходите за пределы (вместо этого от разлома seg). – PaulMcKenzie
@EmrahIzci Строковые значения не указаны! –