Добавление 2d Array к 1d Array - PullRequest
0 голосов
/ 01 марта 2019

Код должен создать массив 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);
}

Я заполнил вкладку 3x3 2d цифрами 1.

Для первого цикла это должно было быть {1,1,1}, новместо этого появляется что-то странное.

1( 0)
-842150450( 1)
-842150450( 2)
2( 0)
-842150449( 1)
-842150449( 2)
3( 0)
-842150448( 1)
-842150448( 2)

Что я могу сделать, чтобы все работало нормально?

1 Ответ

0 голосов
/ 01 марта 2019

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...