【发布时间】:2019-07-27 12:52:42
【问题描述】:
多维数组初始化有什么区别?
这是“最长公共子序列”问题。
string str1, str2;
getline(cin, str1);
getline(cin, str2);
int alphaCount[26] = { 0, };
int str1Len = str1.length();
int str2Len = str2.length();
int** arr = new int* [str1Len+1];
for (int i = 0; i < str1Len+1; i++)
{
arr[i] = new int[str2Len+1];
//Method One
for (int j = 0; j < str2Len+1; j++)
{
arr[i][j] = 0;
}
}
for (int i = 0; i < str1Len; i++)
{
for (int j = 0; j < str2Len; j++)
{
int y = i + 1;
int x = j + 1;
if (str1[i] == str2[j])
arr[y][x] = arr[y - 1][x - 1] + 1;
else
{
if (arr[y][x - 1] > arr[y - 1][x])// using uninitialized memory ERROR
arr[y][x] = arr[y][x - 1];
else
arr[y][x] = arr[y - 1][x];
}
}
}
cout << arr[str1.length()][str2.length()] << "\n";
// Method Two
// Not Error
for (int i = 0; i < str1Len + 1; i++)
{
for (int j = 0; j < str2Len + 1; j++)
{
arr[i][j] = 0;
}
}
// Method Three
//global valiable, Not Error
int arr[1001][1001];
为什么方法一有错误信息 警告 C6001:使用未初始化的内存。
方法一和方法二有什么区别?
【问题讨论】:
-
我的编译器是 Visual Studio 2019。
-
method2 中的 arr 是什么?
-
方法1:使用声明初始化。 .方法2:声明后初始化
-
您需要发布minimal reproducible example。这包括一个任何人都可以按原样编译的完整程序,以及重现问题所需的任何输入。
-
我发布了一个新代码
标签: c++ visual-c++