0
我試圖運行下面的代碼,但它給我分割故障: -分段故障使用std ::時填寫
#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循環中。但是,如果我註釋填充語句,則不存在分段錯誤。
這可能是什麼原因?
_「這可能是什麼原因?」_未定義的行爲最有可能。無法從您的代碼示例中發現它。 –
爲什麼使用C++字符串,然後使用固定大小的C數組和宏?使用可以是所需大小的矢量,並且不會因大輸入而中斷。 –
也嚴重:[爲什麼我不應該#include?](http://stackoverflow.com/questions/31816095/why-should-i-not-include-bits-stdc-h)! –