【发布时间】:2016-04-23 14:27:34
【问题描述】:
我的代码中出现了问题,我为双精度值分配了一个二维数组。 所以首先我使用的代码:
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,但我也收到此错误消息。我也看了一下谷歌,只是按照我的方式找到了代码。但是错误仍然存在。
【问题讨论】:
-
你必须在 c++ 中转换
(double *) malloc( ... )或使用 ̀new double*` -
我也这么写:matrix = (double*) malloc(nrowsizeof(double));和矩阵[j] = (double *) malloc(ncolumn * sizeof(double));
-
拜托!这是 C++。使用
new[]和delete[],或者更好的是vector<double>。 -
@Roddy 我现在正在使用 new[] 命令,现在我可以分配内存了。要释放内存,我必须使用数组的反向路径。那么首先在 for 循环中使用 delete[] 命令,而不是在数组中使用 delete[]?
-
@user3794592 是的。 (但
std::vector会省去你删除的麻烦)