我创建了一个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
答案 0 :(得分:1)
如果您仔细分析以下几行,您将意识到您正在访问内存超出范围,并且程序显示未定义的行为。
for (int n = 0; n < rowCount*t; n++)
*((int*)ary + t) = -1;
该行
*((int*)ary + t) = -1;
在以下方面有误。
您正在向int**
投射int*
。
您已使用对new
的多次调用分配了内存,但您正试图将其视为使用对int
的一次调用分配所有new
的数据
简单的解决方法是:
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;
}