为双精度值分配内存时出错



我在代码中遇到了一个问题,因为我为双精度值分配了一个二维数组。所以首先我使用的代码:

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

相关内容

  • 没有找到相关文章

最新更新