c++ - 将二维数组添加到一维数组
问题描述
该代码应该创建一个二维数组,用一些值填充它,然后将这些值放入一维数组并添加 **我有一个名为 AddTab 的函数,它应该将二维数组添加到一维数组。
#include "pch.h"
#include <iostream>
using namespace std;
int **createTab(int n, int m)
{
int **tab = nullptr;
try {
tab = new int *[n];
}
catch (bad_alloc)
{
cout << "error";
exit(0);
}
for (int i = 0; i < n; i++)
{
try {
tab[i] = new int[m] {};
}
catch (bad_alloc)
{
cout << "error";
exit(0);
}
}
return tab;
}
void FillTab(int m, int n, int **tab)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> tab[i][j];
}
}
}
void AddTab(int **tab,int n,int m)
{
int *temp_tab=new int[m];
memset(temp_tab, 0, sizeof(temp_tab));
for (int i=0;i<m;i++)
{
for (int j=0;j<n;j++)
{
temp_tab[j] += tab[i][j];
cout << temp_tab[j] << "( " << j << ")" << endl;
}
}
}
int main()
{
int **X = nullptr;
X = createTab(3, 3);
FillTab(3, 3, X);
AddTab(X, 3, 3);
}
我用 1 填充了 3x3 2d 选项卡。
对于第一个循环,它应该是 {1,1,1} 但会弹出一些奇怪的东西。
1( 0)
-842150450( 1)
-842150450( 2)
2( 0)
-842150449( 1)
-842150449( 2)
3( 0)
-842150448( 1)
-842150448( 2)
我该怎么做才能正常工作?
解决方案
sizeof(temp_tab)
为了
int *temp_tab
返回 4/8 字节,取决于系统。因此,只有前 4/8 个字节为您的动态分配数组设置为 0。如果temp_tab[j]
未设置为 0,则通过这样做temp_tab[j] += tab[i][j];
您更新垃圾值,最后您也会获得垃圾值。
使固定:
memset(temp_tab, 0, sizeof(int) * m);
推荐阅读
- python - 在 python 中编码时,我在四舍五入时遇到问题
- javascript - 在 es6 中返回未定义的异步函数
- c# - Caliburn Micro "cannot find view for ..."
- c# - 在运行时将实体对象添加到 LINQ-to-SQL 数据上下文 - SQL、C#(WPF)
- java - Dependent maven projects heroku or google cloud deployment
- grpc - GRPC REST 通道实现
- html - Efficiently load videos that require authorization
- javascript - jQuery formating universal currency data
- r - Replacing all values to 1 after a condition
- c# - How can I change the VSBuild agent location on Azure Devops?