Сбой динамического 1D и 2D массива c ++ - PullRequest
0 голосов
/ 21 марта 2019

Я уже динамически выделил массив 1D, int * x, и массив 2D, int ** y.Я пытаюсь отобразить сумму динамических 1D и 2D массивов, определяемых длинами, введенными пользователем.Я должен запустить программу дважды для длины 5 и 10 для массива 1D и длины 3,5 и 6,7 для массива 2D.Это сбой и не отображаются какие-либо суммы на консоли.Пожалуйста помоги!

#include <iostream>

using namespace std;

int main()
{
    float sum = 0.0;
    float sum2 =0.0;
    float sum3 = 0.0; //1d array length 10
    //1d array dynamic allocation
    //2d array dynamic allocation
    int length; //user length for 2d array, 5
    int length2 = 3; //length for 2d array, 3
    float oneArray; //length for 1d array
    float oneArray2; // 1D array
    int length1;
    float sum4=0.0;

    cout << "Enter dimensions " << endl;
    cin >> length >> oneArray2;

    cout << "Enter dimensions for 2d array " << endl;
    cin >> length2 >> oneArray;


    int *x = new int[oneArray2]; //single

    int **y = new int* [length2]; //creates array


    for(int i= 0; i < length; i++) //initializing 2d array
        for(int j =0; j < length2; j++)
        {
            y[i][j] = i*j;
        }


    //initialize for 1d array
    for(int l=0; l < oneArray2; l++)
    {
        x[l] = l;
    }


    for(int i= 0; i < length; i++) // allocating for 2d array
        {
            y[i] = new int[5];

        }

    for(int i=0; i< oneArray2; i++)
    {
        sum = sum + x[i];
        cout << sum;

    }

    for(int k=0; k < length1; k++){

        sum3 = sum3 + x[k];
        cout << sum3;
    }



    for(int i= 0; i < length; i++) //initializing
        for(int j =0; j < length2; j++)
        {
            sum2 = sum2 + y[i][j];
            cout << sum2;

        }

    for(int i=0; i < 6; i++)
        for(int j=0; j < 7; j++)
        {

            sum4 = sum4 + y[i][j];
            cout << sum4;
        }


    for(int i=0; i < length; i++)
        for(int j=0; j < length2; j++)
        {
        delete[] y[i][j]; //error message here too

        }


    for (int i=0; i < oneArray2; i++)
         delete[] y[i];


    return 0;

}

1 Ответ

1 голос
/ 21 марта 2019

сначала вы выделяете память для 2d-массива, прежде чем инициализировать его, а не наоборот

Second

правильный способ освободить эту память для 2D-массива -

for(int i=0; i < length; i++)
 //first you deallocate every row y[i]
 delete [] y[i];

delete [] y;

и для 1D массива

delete[] x;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...