为双值分配内存时出错

时间:2016-01-18 12:04:29

标签: c++ arrays malloc

我的代码中遇到了一个问题,即为double值分配一个二维数组。 首先是我使用的代码:

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));
    }
}

由于我有许多段,并且每个段具有不同的行数,因此我必须为每个段编辑数组。这就是为什么我使用带有nSlices的for循环。

但是在使用malloc命令的两行中,我从visual studio收到错误。这是错误消息:

  

错误C2440:'=':无法从'void *'转换为'double *'
    错误C2440:'=':无法从'void *'转换为'double *'
    IntelliSense:类型“void *”的值不能分配给“double **”类型的实体     IntelliSense:无法将类型为“void *”的值分配给“double *”

类型的实体

我也试过使用calloc,但我也收到了这个错误消息。我也看了谷歌,只是按照我做的方式找到了代码。但错误仍然存​​在。

3 个答案:

答案 0 :(得分:1)

malloc返回一个(void *)指针,你应该将返回值转换为(double **)和(double *)

matrix = (double**)malloc(nrow*sizeof(double*));

matrix[j] = (double*)malloc(ncolumn * sizeof(double));

答案 1 :(得分:1)

错误消息清楚地告诉您发生了什么:malloc返回void*,既不是double**,也不是double*。投下结果:

matrix = (double**)malloc(nrow*sizeof(double*));
// ...
matrix[j] = (double*)malloc(ncolumn * sizeof(double));

或重构为std::vector<double>(注意:不是std::vector<std::vector<double>>如果需要密集矩阵,请参阅 this answer),这样更容易,更安全。

答案 2 :(得分:0)

malloc return void *。在malloc之前尝试(double *)或使用operator new