2016-04-08 12 views
1

Bu program neden çöküyor?string :: assign dizgilerde vektör çalışmıyor

#include <vector> 
#include <string> 
using namespace std; 

int main() 
{ 
    vector<string> vec; 
    vec.reserve(5); 
    vec[0].assign("blabla"); 
} 

Ya da bu: Bu hat vec[0].assign("blabla"); çöküyor

#include <vector> 
#include <string> 
using namespace std; 

int main() 
{ 
    vector<string> vec; 
    vec.reserve(5); 
    vec[0].push_back('a'); 
} 

Ve bunun yerine gerçekten işe yaramazsa kullanımına en iyi nedir?

cevap

1
vector<string> vec; 
vec.reserve(5); 
vec[0].assign("blabla"); 

Bu, tanımlanmamış davranışlara neden olur. vec[0] ayrılmış ancak ayrılmamış. Bunun yerine itme ya da imparatorluk kullanmalısınız.


vector<string> vec; 
vec.reserve(5); 
vec[0].push_back('a'); 

aynı hata. Henüz bellekte mevcut olmayan vec[0]'a itiyorsunuz.


Çözüm:

vector<string> vec; 
vec.reserve(5); 
vec.emplace_back("blabla"); //or push_back 

Veya:

vector<string> vec; 
vec.resize(5);// Notice resize not reserve 
vec[0].assign("blabla");//this works now since vec[0] is exist 

Veya:

vector<string> vec; 
vec.resize(5);// Notice resize not reserve 
vec[0].push_back('b'); //this works now since vec[0] is exist 

yapmam DEĞİL, N katına neden olduktan sonra ikinci seçeneği tercih eder N kez