0
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
4

3 回答 3

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()不预先知道元素数量的情况下使用。

于 2012-10-22T19:48:26.860 回答
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
于 2012-10-22T19:48:54.890 回答
0

如果你想使用 getline,我认为你需要在向量中保留空间。通过给出 nombre_instancia[k],程序有一个未初始化的向量。使用保留,或 push_back(null)

于 2012-10-22T19:51:54.923 回答