0

list.begin() に初期化された反復子を逆参照すると、segfault が発生します。

list<data>::iterator it;
for(int i=0; i< n; i++)    
{
    it = (list_empty[i]).begin();
    while(it != (list_empty[i]).end())
    {
        cout<<"PROBLEM HERE: size="<<it->process.size<<endl;
        //cout<<"log file i="<<i<<endl;
        log_file_start(current_time, it,"list of empty");
        it++;
    }
}

これは gdb からのエラーです。

Program received signal SIGSEGV, Segmentation fault.
[Switching to process 2888]
0x0804ecc0 in log_file_buddy (list_delay=..., list_vp=..., 
    list_empty=0x805a00c, method=..., current_time=0, n=10)
    at fuctions_of_mm.cpp:425 
425         cout<<"PROBLEM HERE: size="<<it->process.size << endl;

bt full を使用した gdb の出力は、反復子が NULL であることを示しています。

(gdb) bt full
#0  0x0804ecc0 in log_file_buddy (list_delay=..., list_vp=..., 
    list_empty=0x805a00c, method=..., current_time=0, n=10)
    at fuctions_of_mm.cpp:425
        i = 8
        it = {_M_node = 0x0}
        out = <incomplete type>

イテレータは NULL ですが、it != (list_empty[i]).end()評価されます。なにが問題ですか?

編集: 省略して申し訳ありません。これがそれです: list_empty = new list<data>[n]; N は与えられたパラメータで、これを表します: 2^{N} = Size_of_Memory

編集#2: これは定義です:

typedef struct data{
    int position;
    vp proccess;
    int delay;
    int current_life;
    int time_start;
    int time_stop;
    int part_of_memory; 
    bool operator ==(const data& st)
    {
      return proccess.pid == st.proccess.pid;
    }
}data;

そして vp の定義:

    typedef struct {
    int size;
    int pid;//prosdiorisths diergasias
 }vp

n: の値n = 10

list_empty の宣言は list< data > *list_empty; です。.

4

2 に答える 2

0

とはit?

it_empty = new list<data>::iterator[n];
for(int i=0; i< n; i++)    
{
    auto it = (list_empty[i]).begin();
    while(it != (list_empty[i]).end())
    {
        cout<<"PROBLEM HERE: size="<<it->process.size<<endl;
        //cout<<"log file i="<<i<<endl;
        log_file_start(current_time, it,"list of empty");
        it++;
    }
}
于 2013-01-24T19:01:02.137 に答える