访问冲突写入位置 0xCCCCCCCC 创建二维数组
Access violation writing location 0xCCCCCCCC creating 2d array
我正在尝试创建一个动态二维数组。
这是我的代码:
bool b_alloc_table_2_dim(int ***piTable, int iSizeX, int iSizeY)
{
*piTable = new int*[iSizeX];
for (int ii = 0; ii < iSizeX; ii++)
*piTable[ii] = new int[iSizeY]; // here i get the exception
return true;
}
int main()
{
int **x ;
b_alloc_table_2_dim( &x, 3, 5);
return 0;
}
我找不到代码有什么问题。调用我的函数后,x 应该指向二维数组。
[]
运算符优先于 *
。 cppreference
所以行
*piTable[ii] = new int[iSizeY];
相当于
*(piTable[ii]) = new int[iSizeY];
您想写的是:
(*piTable)[ii] = new int[iSizeY];
使用实际容器
使用实际容器可以避免您遇到的许多类型的问题。
而不是
int**
对于二维数组(矩阵),更合适的数据结构可能是
std::array< std::array<int, cols>, rows>
如果大小在编译时已知。
如果没有,最好只使用单个向量 ala。
auto my_array2d = std::vector<int>(rows*cols);//array now has 'rows*cols' elements of '0'
并自行处理索引。
这样的库
我正在尝试创建一个动态二维数组。
这是我的代码:
bool b_alloc_table_2_dim(int ***piTable, int iSizeX, int iSizeY)
{
*piTable = new int*[iSizeX];
for (int ii = 0; ii < iSizeX; ii++)
*piTable[ii] = new int[iSizeY]; // here i get the exception
return true;
}
int main()
{
int **x ;
b_alloc_table_2_dim( &x, 3, 5);
return 0;
}
我找不到代码有什么问题。调用我的函数后,x 应该指向二维数组。
[]
运算符优先于 *
。 cppreference
所以行
*piTable[ii] = new int[iSizeY];
相当于
*(piTable[ii]) = new int[iSizeY];
您想写的是:
(*piTable)[ii] = new int[iSizeY];
使用实际容器
使用实际容器可以避免您遇到的许多类型的问题。
而不是
int**
对于二维数组(矩阵),更合适的数据结构可能是
std::array< std::array<int, cols>, rows>
如果大小在编译时已知。
如果没有,最好只使用单个向量 ala。
auto my_array2d = std::vector<int>(rows*cols);//array now has 'rows*cols' elements of '0'
并自行处理索引。
这样的库