如何在c ++中设置具有特定值的2d动态数组

时间:2015-09-04 21:30:57

标签: c++ multidimensional-array dynamic-arrays

我创建了一个2D动态数组(ary),并将所有元素初始化为-1 ,,,然后我想用一些值设置数组元素,但它不起作用

int rowCount,t;

t=4; rowCount = t/3 + (t % 3 != 0);

int** ary = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
    ary[i] = new int[t];


for (int n = 0; n < rowCount*t; n++)
  *((int*)ary + t) = -1;

for(int m=0;m<rowCount;m++)
   for(int h=0;h<t;h++)
ary[m][h]=a[h];  // a is predefined array  

1 个答案:

答案 0 :(得分:1)

如果您仔细分析以下几行,您将意识到您正在访问内存超出范围,并且程序显示未定义的行为。

for (int n = 0; n < rowCount*t; n++)
  *((int*)ary + t) = -1;

该行

  *((int*)ary + t) = -1;

在以下方面有误。

  1. 您正在向int**投射int*

  2. 您已使用对new的多次调用分配了内存,但您正试图将其视为使用对int的一次调用分配所有new的数据

  3. 简单的解决方法是:

    for (int row = 0; row < rowCount; row++)
    {
       for (int col = 0; col < t; ++col )
       {
          arr[row][col] = -1;
       }
    }
    

    您还可以选择使用一次int调用为所有new分配内存。在这种情况下,您将不得不担心在其余代码中将行和列映射到一个索引。

    // Allocate memory in one chunk.
    int* arr = new int[rowCount+t];
    
    // Initialize values to -1.
    for (int n = 0; n < rowCount*t; ++n )
    {
       arr[n] = -1;
    }