访问冲突写入位置 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'

并自行处理索引。

最好的办法当然是使用像 or

这样的库