我在代码中遇到了一个问题,因为我为双精度值分配了一个二维数组。所以首先我使用的代码:
double** matrix;
double ncolumn=2;
double nrow;
for (size_t i=0; i<nSlices; ++i) {
const std::vector<LineSegment> &lss = slicesWithLineSegments[i];
//I use
nrow = lss.size();//Returns the numbers ob Row;
matrix = malloc(nrow*sizeof(double*));
for (size_t j=0; j<nrow; ++j)
{
matrix[j] = malloc(ncolumn * sizeof(double));
}
}
由于我有许多段,并且每个段都有不同数量的行,因此我必须编辑每个段的数组。这就是为什么我将for循环与nSlices一起使用。
但是在带有malloc命令的两行中,我从Visual Studio收到错误。这是错误消息:
错误 C2440:"=":无法从"void *"转换为"双精度 *"
错误 C2440:"=":无法从"void *"转换为"双精度 *"
智能感知:不能将类型为"void *"的值分配给类型为"双精度 **"
的实体 智能感知:不能将类型为"void *"的值分配给类型为"double *"的实体
我也尝试使用 calloc,但我也收到了此错误消息。我也在谷歌上看了一下,只是找到了我的方式的代码。但错误仍然存在。
>malloc 返回一个 (void*) 指针,你应该将返回转换为 (double**) 和 (double*)
matrix = (double**)malloc(nrow*sizeof(double*));
matrix[j] = (double*)malloc(ncolumn * sizeof(double));
错误消息清楚地告诉您发生了什么:malloc
返回既不double**
也不double*
的void*
。要么投射结果:
matrix = (double**)malloc(nrow*sizeof(double*));
// ...
matrix[j] = (double*)malloc(ncolumn * sizeof(double));
或重构为std::vector<double>
(注意:如果需要密集矩阵,请参阅此答案,则不std::vector<std::vector<double>>
),这更容易,更安全。
malloc return void *.在malloc之前尝试(双*)或使用运算符new