2009-03-18 5 views
0

Je pense qu'il est une simple question pour vous .... Je suis assez nouveau dans C++ .....Comment puis-je éviter une erreur de segmentation tout redimensionner un vecteur comme celui-ci

j'ai donc un vecteur défini comme ceci:

vector<vector<float> > big_vector;

lire un fichier et initialisé ce vecteur, le big_wector compte environ 200 000 éléments en elle. chacun est un vecteur < flotteur>

Alors je voulais modifier les éléments big_vector, pour certains éléments que je dois les redimensionner d'abord, (par exemple de 0 à 300)

big_vector[i].resize(new_size);

Quand je courais le programme, d'abord il s'est bien passé, après quelques modifications, une "faute de segmentation" s'est produite à la ligne ci-dessus.

+0

Avez-vous envisagé d'utiliser un débogueur pour examiner les valeurs que vous transmettez pour voir si elles sont hors de portée? –

+0

Il n'y a pas assez d'informations pour vous aider. Si vous avez posté le code, nous pourrions au moins voir ce que vous faites. Une description en anglais du problème n'est PAS une bonne idée car cela explique ce que vous pensez que vous faites et non ce que vous êtes en train de faire. –

+0

heh, "grand wector" –

Répondre

0

Vous avez un vecteur de vecteurs.

Avant de pouvoir accéder à big_vector[i] (le vecteur de flottants à i), vous devez définir la taille de big_vector lui-même.

5

D'abord vous avez besoin de redimensionner big_vector, de sorte qu'il a des vecteurs à redimensionner.

int total_vectors = 100; 
big_vector.resize(total_vectors); 
for(int i = 0; i < total_vectors; ++i) 
    big_vector[i].resize(new_size); 
1

Pourquoi avez-vous besoin de redimensionner des vecteurs? Est-ce que simple push_back n'est pas suffisant? Ou définissez-vous des valeurs par index?

Si vous définissez des valeurs de l'indice, je vous recommande d'utiliser std :: generate_n avec std :: back_inserter

Questions connexes