在C++中调试直方图
Debugging a histogram in C++
我想构建一个具有ell
间隔的直方图。每个间隔的大小计算为k = ceil(m/ell)
其中m
是数据集中的最大数字。也就是说,间隔i
应该是 [(i - 1) * k, i * k)
.如果数据集由数字16 33 55 57 8 47 1 21 14 73 6 59 29 57 20 95 77 5 62 48
给出,并且区间数ell = 10
,直方图必须以文本形式表示为
0: 4
10: 2
20: 3
30: 1
40: 2
50: 4
60: 1
70: 2
80: 0
90: 1
我需要编写一个程序,该程序读取以下值(来自标准输入 cin):
- 间隔的
ell
数 - 数据集的大小
n
-
n
非负整数
这是我到目前为止的代码:
#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
int main() {
double ell;
int n; // size of the data set
double m = 0;
int * a;
int * x;
int * y;
cin >> ell;
cin >> n;
a = new int[n];
// finding max element in array a
for (int i = 0; i < n; i++) {
cin >> a[i];
if (a[i] > m) {
m = a[i];
}
}
int k = ceil(m/ell);
x = new int[(int)(ell)];
y = new int[(int)(ell)];
for (int i = 1; i <= ell; i++) {
x[i] = (i - 1) * k;
for (int j = 0; j < n; j++) {
if (a[j] >= (i - 1) * k && a[j] < i * k && x[i] != (ell - 1) * k) {
y[i] += 1;
} else if (a[j] >= (ell - 1) * k && x[i] == (ell - 1) * k) {
y[i] += 1;
} else {
y[i] += 0;
}
}
cout << x[i] << ": " << y[i] << endl;
}
delete [] a;
delete [] x;
delete [] y;
return 0;
}
如果我输入这个:
10 20 16 33 55 57 8 47 1 21 14 73 6 59 29 57 20 95 77 5 62 48
我得到
0: 4
10: 2
20: 3
30: 1
40: 2
50: 4
60: 1
70: 2
80: 0
90: 1
但是如果我多次输入相同的内容,我会得到一个奇怪的输出,例如
0: 4
10: 268501820
20: 1073741827
30: 112
40: 2
50: 4
60: 1
70: 2
80: 0
90: 6
为什么会发生这种情况,我该如何解决我的问题?
x = new int[(int)(ell)];
y = new int[(int)(ell)];
在堆上创建对象,但除非对象(即 int
)有一个构造函数,那么内存将保持未初始化状态。
数组x
已正确初始化,但保留y
(预期为 0)。
所以解决方法是...
x = new int[(int)(ell)];
y = new int[(int)(ell)];
for( int i = 0; i < ell ; i++ ){
x[i] = 0; // tidier to do it obviously.
y[i] = 0; // essential to get y[i] += 1; to be meaningful.
}
你从不初始化你的记忆。您可以同时使用 x 和 y 创建动态数组,但不能保证内存归零。在大多数情况下,您会很幸运,但是当程序使用的内存中还剩下值时,您会得到看到的异常值。放这样的东西,它应该可以解决你的问题。
for(int m = 0;m < (int)ell; m++) {
x[m] = 0;
y[m] = 0;
}
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 在linux上调试巨大的C++项目
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在VS调试器中监视映射条目
- 使用调试/崩溃报告将应用程序部署到客户端
- VC++本机单元测试,找不到调试符号
- 如何在C++生成器中禁用"使用调试.dcus"
- 使用vscode调试时,GDB意外退出
- 即使使用调试编译标志,表达式也是"optimized out"
- 调试 CUDA MMU 故障
- 小字符串优化(调试与发布模式)
- 调试和自由执行中的信号处理
- 调试编译的服务器在数据库打开时崩溃
- Visual Studio 调试优化如何工作?
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 如何在大型c++项目的可视化代码中设置调试
- Qt 调试显示行号
- 在C++中调试直方图