我的代码中遇到了一个问题,即为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,但我也收到了这个错误消息。我也看了谷歌,只是按照我做的方式找到了代码。但错误仍然存在。
答案 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