我想创建一个大数据集的距离矩阵,并且只想存储'close'足够的元素。代码读起来像这样
vector<double> * D;
D = (vector<double> *) malloc(dim *sizeof(vector<double>) ) ;
for(i=0;i<dim;i++){
for(j=i+1;j<dim;j++){
dx = s[j][0] - s[i][0];
dy = s[j][1] - s[i][1];
d = sqrt( dx*dx + dy*dy );
if(d < MAX_DISTANCE){
D[i].push_back(d);
D[j].push_back(d);
}
}
这给了我分段错误。我想我还没有正确定义向量数组。我该如何解决这个问题?
答案 0 :(得分:4)
在C ++中,您应该从不使用malloc
分配对象(或对象数组)。虽然malloc
擅长分配内存,但就是这样。 不做的是调用构造函数,这意味着所有vector
对象都未初始化。使用它们将导致未定义的行为。
如果要动态分配数组,则必须使用new[]
。或者,更好的是,使用std::vector
(是的,你可以有一个矢量矢量,std::vector<std::vector<double>>
就可以了。)
使用右vector constructor,您可以初始化特定大小的矢量:
// Create the outer vector containing `dim` elements
std::vector<std::vector<double>> D(dim);
完成上述操作后,您可以像以前一样使用现有的循环。