带有动态数组的操作内存中的垃圾箱
Trash in operating memory with dynamic arrays
我尝试制作一种算法,该算法计算有多少数字被除以而没有余数。代码有效,但每次运行它时,我的输出中都会收到"垃圾"数字。我正在使用动态数组来解决问题。
#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++所说的: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
你这样做
int *data = new int [N];
并分配一个 N 大小的数组。然后,您立即开始尝试递增其中的值:
data[c] += 1;
但是一开始是什么呢?
如果要保证所有值都将初始化为 0,根据此答案,您可以使用以下命令分配数组:
int *data = new int [N]();
// ^^^^
<必须在此处评论"你应该只使用std::vector
!"。\>
(但实际上,矢量会使这种方式更容易并完全避免这个问题(
data[c] += 1;
您向未初始化的值添加了一些内容。 在此之前,data[c] 不一定是 0。 new
不会将动态数组初始化为零。
退出所有新建/删除并使用 std::vector<>。而且,一定要学习使用调试器 - 在这种情况下真的很有帮助。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 类型总是使用其大小存储在内存中吗
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 带有动态数组的操作内存中的垃圾箱