我尝试创建一种算法,该算法计算除以除法运算的余数。代码可以工作,但是每次运行它时,我的输出中都会出现“垃圾”数字。我正在使用动态数组来解决问题。
#include <iostream>
using namespace std;
int main()
{
int N = 30;
int *data = new int [N];
for (int i = 0; i < 100; i++)
{
for (int c = 1; c < N; c++)
{
if (i % c == 0)
{
data[c] += 1;
}
}
}
for (int k = 1; k < N; k++)
{
cout << data[k] << endl;
}
delete [] data;
}
我期望至少具有C ++ Shell所说的内容:http://cpp.sh/6xtc
100
50
34
25
20
17
15
13
12
10
10
9
8
8
7
7
6
6
6
5
5
5
5
5
4
4
4
4
4
,但是在不同的IDE中得到相同的结果:
100
11932994
34
25
20
17
15
13
12
620757039
37045
11951945
8
11927896
7
7
7290
158
6
5
5
570425383
37040
11951941
4
11927892
4
1835102827
859059803
答案 0 :(得分:6)
你做
int *data = new int [N];
并分配一个N大小的数组。然后,您立即开始尝试增加其中的值:
data[c] += 1;
但是其中首先是什么?
如果您想保证所有值都将初始化为0,则每个this answer都可以使用以下方式分配数组:
int *data = new int [N]();
// ^^^^
<强制性的:“您应该只使用std::vector
!”在这里发表评论。\>
(但实际上,向量可以使这种方式更容易并且完全避免此问题)
答案 1 :(得分:3)
data[c] += 1;
您向未初始化值添加了一些内容。在此之前,data [c]不一定为0。 new
不会将动态数组初始化为零。
退出所有新建/删除并使用std :: vector <>。而且,一定要学会使用调试器-在这种情况下确实很有帮助。