C++ 2D 动态阵列分配
C++ 2D dynamic array allocation
我有一个包含num_rows
行和num_cols
列的float**
数组。我想确定 0-9 列之间每个数字的出现次数。为此,我想使用另一个大小为 [10][num_cols]
的 2D 数组,以便对于每列,对应于元素的数字是该数字在原始表中的出现次数。示例:如果原始表在第五列中包含1 2 3 1 1
,则在第二列中,值应为:1-> 3, 2 -> 1, 3 -> 1
。
尝试按如下方式使用该函数,但它给了我指针错误。我尝试使用矢量,但这也没有带来运气。
int ** attribute_count(float * * input, int row_num, int col_num) {
int ** arr_2 = new int * [10];
int * arr = new int[10 * col_num];
int counter = 0;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < col_num; j++) {
arr_2[i][j] = 0;
}
}
for (int i = 0; i < 9; i++) {
for (int j = 0; j < col_num; j++) {
int temp = input[i][j];
arr_2[temp][j]++;
}
}
return arr_2;
}
编辑:我尝试了你的建议。新代码为:
int** attribute_count(float** input, int row_num, int col_num) {
int** arr_2 = new int* [10];
int* arr = new int[10 * col_num];
int counter = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < col_num; j++) {
arr_2[i] = new int[col_num];
}
}
for (int i = 0; i < 11; i++) {
for (int j = 0; j < col_num; j++) {
int temp = input[i][j];
arr_2[temp][j]++;
}
}
return arr_2;
}
这仍然给我带来了记忆错误。该函数在.cpp中被调用,如下所示:
int** attr = attribute_count(training_data, 10, num_cols_train);
cout<<attr[5][1];
知道我现在做错了什么吗?
我认为您的问题在于 2D 数组的分配不正确。尝试
int ** arr_2 = new int* [row_num];
for (int i = 0; i < row_num; i++)
arr_2[i] = new int[col_num];
您只分配了 arr_2
的一个维度。 您需要遍历并在每个整数上分配一个整数数组,以获得第 2 维。
编辑:另外,arr
怎么了? 你分配它,从不使用它,不返回它,也不取消分配它。 这就是我们拼写内存泄漏的方式。
arr_2被定义并分配为指向 int 的指针数组,但您实际上并没有分配/分配这些指针。
这是纠正您的代码的一个尝试 - 但是我不相信你有正确的行和列......
int ** attribute_count(float ** input, int row_num, int col_num)
{
int ** arr_2 = new int * [10];
for (int i = 0; i < 10; i++)
{
arr_2[i] = new int[col_num];
for(int j = 0 ; j < col_num ; j++)
{
arr_2[i][j] = 0;
}
}
for (int i = 0; i < row_num; i++)
{
for (int j = 0; j < col_num; j++)
{
int temp = input[i][j];
arr_2[temp][j]++;
}
}
return arr_2;
}
相关文章:
- 二维阵列的动态分配
- 为什么删除分配的阵列会导致内存错误?
- 新的阵列分配
- 分配给阵列时出现分段错误?黑客排名 2D 阵列 - DS.
- 分配/访问2d阵列,使得2d子块是连续的
- 重新分配2D阵列并删除旧阵列
- 轻松C++阵列分配
- 英特尔并行工作室 2015 C++中的 2D 动态分配全局阵列
- 解除分配此特定 2D 阵列的内存
- 我可以在堆栈上分配`std :: array`阵列,而不知道编译时大小
- 通过"Value Template Argument"与常规阵列在堆栈中分配内存
- C - 将所有分配的双阵列对齐至32 bytes
- 重新分配指针阵列的一部分的安全方法
- 动态分配'string'阵列
- 未分配阵列上的编号
- 与其所有者一起分配阵列的正确方法
- 为 C++ + OpenGL + QT 分配阵列
- 分配阵列时bad_alloc
- C++中2D动态内存分配阵列中的空闲分配内存
- C++中的2D动态内存分配阵列