首页 > 解决方案 > 数组元素改变值?

问题描述

int m;
cin >> m;
int d[m],g[m];
for (int i=1;i<=m;i++){
cin >> g[i] >> d[i];
}

我将 m 设置为 3。然后我将 g[i] 和 d[i] 设置为 2 和 9、5 和 25、16 和 24(第一个数字是 g[i],第二个是 d[i])。后来在程序中 d[1] 不是 9 ,而是 24 。任何想法发生了什么?

标签: c++

解决方案


int m;
int d[m],g[m],
cin >> m;

我将 m 设置为 3。然后我将 g[i] 和 d[i] 设置为 2 和 9

请注意,您g甚至d在 set 之前声明了m.

int m;
int d[m],g[m],

这是未定义的行为:m未初始化,您正在尝试使用它的值。

正如评论者所指出的,您使用的是可变长度数组,它是编译器 gcc 的扩展,但不是标准 C++。现在改掉这个习惯就好了。

您可以通过先定义来修复您的代码m,例如const int m = 3;然后不要费心从std::cin.

另请注意,您将在for循环中越界:

for (int i=1;i<=m;i++){

数组是从 索引的0,所以应该是for (int i = 0; i < m; i++)

更进一步,您可以从 中读取它std::cin,然后将dand定义gstd::vector

int m = 0;
std::cin >> m;
std::vector<int> d(m), g(m);
for (int i = 0; i < m; i++)

您不想听到的内容:鉴于这里所犯的简单错误,您应该真正从书本中开始学习 C++,而不是您现在正在尝试学习它。


推荐阅读