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; です。.