【问题标题】:Dynamic 1D and 2D array c++ crash动态一维和二维数组 C++ 崩溃
【发布时间】:2019-08-11 19:01:08
【问题描述】:

我已经动态分配了一维数组 int *x 和二维数组 int **y。我试图显示由用户输入的长度确定的动态 1D 和 2D 数组的总和。对于 1D 数组的长度 5 和 10,以及 2D 数组的长度 3,5 和 6,7,我必须运行该程序两次。它正在崩溃并且没有在控制台上显示任何总和。请帮忙!

#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;

}

【问题讨论】:

  • 您正在初始化二维数组,然后再分配其所有内存。
  • An alternative. 这会从一维数组中生成一个二维数组。由于改进了空间局部性,因此更容易争吵并且通常更快。

标签: c++ arrays pointers dynamic


【解决方案1】:

首先在初始化之前为二维数组分配内存,而不是相反

第二个

为二维数组释放内存的正确方法是

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

delete [] y;

对于一维数组

delete[] x;

【讨论】:

  • 非常感谢!对于二维数组的释放,我仍然收到一条错误消息,在这一行删除 y[i][j];表示您不能删除“int”类型的表达式
  • 检查已编辑的你不能释放 y[i][j] 就像说 int a;然后尝试解除分配,但你甚至没有分配它..另一方面 y[i] 已分配 & y 已分配,所以你必须解除分配它们
  • 我明白了,我在这里分配了 y[i]:y[i] = new int[5];并在此处分配 y: int *y = new int [length2]; ??对吗?
  • 这是有道理的。我为两者都做了正确的释放。非常感谢!!我有点困惑如何检查结果是否正确。你知道我如何检查它们是否正确(对于 2D 数组 3,5?)
  • 是的,我认为这一切都很好 for (int i = 0; i
猜你喜欢
  • 2015-06-05
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多