Duccio Piovani
Duccio Piovani

Reputation: 1460

Create an Array of vectors in C++

I want to create a distance matrix of a big dataset, and only want to store the 'close' enough elements. The code reads like this

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

which gives me segmentation fault. I guess I have not defined the array of vector correctly. How do I get around this ?

Upvotes: 0

Views: 7085

Answers (1)

Some programmer dude
Some programmer dude

Reputation: 409166

In C++ you should never allocate object (or arrays of objects) using malloc. While malloc is good at allocating memory, that's all it does. What it doesn't do is calling constructors which means all your vector objects are uninitialized. Using them will lead to undefined behavior.

If you want to allocate an array dynamically you must use new[]. Or, better yet, use std::vector (yes, you can have a vector of vectors, std::vector<std::vector<double>> is fine).


Using the right vector constructor you can initialize a vector of a specific size:

// Create the outer vector containing `dim` elements
std::vector<std::vector<double>> D(dim);

After the above you can use the existing loops like before.

Upvotes: 4

Related Questions