该代码应该创建一个2d数组,并在其中填充一些值,然后将这些值放入1d数组中并添加 **我有一个称为AddTab的函数,该函数应将2d数组添加到1d数组。
#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)
我该怎么办才能正常工作?
答案 0 :(得分:1)
[1,2,3,4,5,6]
对于
sizeof(temp_tab)
返回4/8字节,取决于系统。因此,动态分配数组仅将前4/8个字节设置为0。如果int *temp_tab
未设置为0,则通过执行temp_tab[j]
,您将更新垃圾值,最后,您也将获得垃圾值。
修复:
temp_tab[j] += tab[i][j];