Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Coursera:自动签名器发出的未知信号11_C++_Dynamic Programming_Subsequence - Fatal编程技术网

C++ Coursera:自动签名器发出的未知信号11

C++ Coursera:自动签名器发出的未知信号11,c++,dynamic-programming,subsequence,C++,Dynamic Programming,Subsequence,我有一段关于最长公共子序列问题的代码(我用动态规划方法) 但Coursera自动加载器出现错误(失败案例#6/37:未知信号11(使用时间:0.00/1.00,使用内存:9166848/536870912)) #包括 使用名称空间std; 最大整数(整数a,整数b) { 返回a>b?a:b; } int公共子序列(向量&arr1,向量&arr2,int n,int m) { int ch[m+1][n+1]={0}; 对于(int i=0;i n; 向量arr1(n,0); 对于(int i=0

我有一段关于最长公共子序列问题的代码(我用动态规划方法)

但Coursera自动加载器出现错误(失败案例#6/37:未知信号11(使用时间:0.00/1.00,使用内存:9166848/536870912))

#包括 使用名称空间std; 最大整数(整数a,整数b) { 返回a>b?a:b; } int公共子序列(向量&arr1,向量&arr2,int n,int m) { int ch[m+1][n+1]={0}; 对于(int i=0;i n; 向量arr1(n,0); 对于(int i=0;i>arr1[i]; } cin>>m; 向量arr2(m,0); 对于(int j=0;j>arr2[j]; }
cout有两个问题可能导致未定义的行为


首先,您创建了一个大小为
ch[m+1][n+1]
的数组,但外部循环是
for(i=0;i可能不是问题所在,而是可变长度数组,如
int ch[m+1][n+1]={0};
不受标准C++支持未知信号11可能是分段错误。程序试图访问它不拥有的资源。请检查以确保所有数组访问都在边界内。
vector
有一个执行边界检查的
at
方法,可以帮助您解决此问题。无关:您的程序将编译如果只包含所需的头,则速度会快得多。
#include
包含所有标准库头,这会非常昂贵。@StephanLechner提出的标准问题很容易导致堆栈溢出,堆栈溢出通常会导致分段错误。实际上,segfault是最好的堆栈溢出将为您做的事情,所以您应该感谢它。 #include <bits/stdc++.h> using namespace std; int max(int a,int b) { return a>b?a:b; } int common_sub_sequence(vector<int> &arr1, vector<int> &arr2, int n, int m) { int ch[m + 1][n + 1]={0}; for (int i = 0; i <= n; i++) { for (int j = 0; j <= m; j++) { if (i == 0 || j == 0) { ch[i][j] = 0; } else if (arr1[i - 1] == arr2[j - 1]) { ch[i][j] = ch[i - 1][j - 1] + 1; } else { ch[i][j] = max(ch[i - 1][j], ch[i][j - 1]); } } } return ch[n][m]; } int main() { int n=0, m=0; cin>>n; vector<int>arr1(n,0); for (int i = 0; i < n; i++) { cin >> arr1[i]; } cin >> m; vector<int>arr2(m,0); for (int j = 0; j < m; j++) { cin >> arr2[j]; } cout << common_sub_sequence( arr1 , arr2, n, m) << "\n"; return 0; }
int ch[n+1][m+1]`
std::vector<std::vector<int> > ch(n+1, std::vector<int>(m+1));