使用动态数组操作内存中的垃圾
Posted
技术标签:
【中文标题】使用动态数组操作内存中的垃圾【英文标题】:Trash in operating memory with dynamic arrays 【发布时间】:2019-07-11 19:40:09 【问题描述】:我尝试了一种算法,它计算有多少数字被除而没有余数。代码有效,但每次我运行它时,我的输出中都会出现“垃圾”数字。我正在使用动态数组来解决问题。
#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
【问题讨论】:
代码有效,但每次运行时,我的输出中都会出现“垃圾”数字。这句话由两个不可调和的部分组成。 【参考方案1】:你会的
int *data = new int [N];
并分配一个 N 大小的数组。然后您立即开始尝试增加其中的值:
data[c] += 1;
但是里面的内容是什么?
如果您想保证所有的值都将被初始化为 0,根据this answer,您可以使用以下方式分配您的数组:
int *data = new int [N]();
// ^^^^
std::vector
!”在这里评论。\>
(但实际上,向量会使这种方式更容易并完全避免这个问题)
【讨论】:
我正在考虑使用我初始化为 0 的“垃圾信息”。它是否可以在计算机上其他重要运行程序的其他地方使用,而我刚刚中断了一个进程?跨度> @Pr.Germux 我不完全确定我是否理解您的问题,但是当您这样做时new int [N]();
您是在说“请给我足够的连续内存块来存储 N 个整数”并且计算机找到了一块没有其他人使用的大内存,并在上面贴了一张写有你名字的便签:)【参考方案2】:
data[c] += 1;
您向 未初始化 值添加一些内容。在此之前,data[c] 不一定为 0。 new
不会将动态数组初始化为零。
退出所有新/删除并使用 std::vector。而且,一定要学习使用调试器——在这种情况下真的很有帮助。
【讨论】:
以上是关于使用动态数组操作内存中的垃圾的主要内容,如果未能解决你的问题,请参考以下文章