Я пытаюсь запустить следующий код, но он дает мне ошибку сегментации: -ошибка сегментации при использовании зОго :: заполнить
#include <bits/stdc++.h>
using namespace std;
#define MAX 1000
int dp[MAX][MAX];
string s1, s2;
int lcs(int i, int j)
{
int val;
if (i < 0 || j < 0)
return 0;
else if (dp[i][j] != -1)
{
return dp[i][j];
}
else
{
val = max(lcs(i-1,j), lcs(i, j-1));
if (s1[i] == s2[j])
val = max(lcs(i-1,j-1) + 1, val);
}
dp[i][j] = val;
return val;
}
int main()
{
int tc;
scanf("%d", &tc);
while (tc--)
{
fill(&dp[0][0], &dp[MAX][MAX], 0);
cin>>s1;
cin>>s2;
printf("LCS = %d\n", lcs(s1.size()-1, s2.size()-1));
}
return (0);
}
Теперь он дает мне ошибку сегментации, на printf
линии в цикле while. Однако, если я прокомментирую инструкцию fill, то нет ошибки сегментации.
Что может быть причиной этого?
_ «Что может быть возможной причиной этого?» _ Вероятнее всего, неопределенное поведение. Не удалось определить его из вашего образца кода. –
Зачем использовать строки C++, а затем фиксированные массивы C и макросы? Используйте векторы, которые могут быть требуемого размера и не будут разбиваться на большие входы. –
Также серьезно: [Почему я не должен #include?] (Http://stackoverflow.com/questions/31816095/why-should-i-not-include-bits-stdc-h)! –