int **dpTable = new int* [iMatrixHeight + 1];
for (int i = 0; i < iMatrixHeight + 1; i++)
{
dpTable[i] = new int [iMatrixWidth + 1];
}
memset(dpTable, 0, (sizeof(int)) * (iMatrixHeight + 1)*(iMatrixWidth + 1));
我正在使用operator new来分配一个二维数组,但是如果我使用memset来初始化数组,那么当我稍后访问数组时会遇到一个段错误。没有memset,没关系。
我做错了吗? THX!
答案 0 :(得分:5)
数组dpTable [i]不指向连续的内存。你必须逐个初始化
for (int i = 0; i < iMatrixHeight + 1; i++)
{
dpTable[i] = new int [iMatrixWidth + 1];
memset(dpTable[i], 0, (iMatrixWidth + 1) * sizeof(int)) ;
}
答案 1 :(得分:2)
而不是这段代码:
int **dpTable = new int* [iMatrixHeight + 1];
for (int i = 0; i < iMatrixHeight + 1; i++)
{
dpTable[i] = new int [iMatrixWidth + 1];
}
memset(dpTable, 0, (sizeof(int)) * (iMatrixHeight + 1)*(iMatrixWidth + 1));
......你可以这样做:
int **dpTable = new int* [iMatrixHeight + 1];
for (int i = 0; i < iMatrixHeight + 1; i++)
{
dpTable[i] = new int [iMatrixWidth + 1]();
}
看看ma,没有memset
- 而是要求将内存归零。
在C ++中仍然非常难看。
所以,这样做:
vector<vector<int>> table( iMatrixHeight + 1, vector<int>( iMatrixWidth + 1 ) );
其中vector
为std::vector
。
或者,考虑使用一个vector
作为后备存储来定义矩阵类。
或者只使用现有的矩阵类,例如来自Boost。