class BPP
{
unsigned n; /* nº de instancias */
vector<string> nombre_instancia; /* nombre de la instancia*/
在构造函数中,我在以下情况下得到了分段错误(核心转储):
file1.open(fich1);
if (file1.is_open()){
file1 >> (unsigned &) n;
for (unsigned k = 0 ; k < n ; ++k){
getline(file1, nombre_instancia[k]); #gives the segmentation fault
fich1中的第2行是:
10
P_0
答案 0 :(得分:2)
您需要在通过vector::operator[]
访问元素之前填充元素。在以下代码中,向量为空:
for (unsigned k = 0 ; k < n ; ++k){
getline(file1, nombre_instancia[k]);
因此对nombre_instancia[k]
的调用超出范围。您可以使用vector::resize()
创建元素:
if (file >> n) // Ensure 'n' correctly assigned.
{
nombre_instancia.resize(n);
for (unsigned k = 0 ; k < n ; ++k){
getline(file1, nombre_instancia[k]);
}
另一种方法是使用vector::push_back()
,而无需预先了解元素的数量。
答案 1 :(得分:2)
我猜你没有将nombre_instancia的大小调整到超过原来的0大小。试试这个:
file1 >> n;
nombre_instancia.resize(n);
for (unsigned k = 0 ; k < n ; ++k){
getline(file1, nombre_instancia[k]); #gives the segmentation fault
答案 2 :(得分:0)
如果您想使用getline,我认为您需要在向量中保留空间。通过给出nombre_instancia [k],该程序具有未初始化的向量。使用reserve或push_back(null)