何らかの理由で、これは私にとってはうまくいきません。ベクトル反復子が範囲外エラーになります。
directory_entry TDE("Path");
vector <directory_entry> Temp;
Temp.push_back(TDE);
User_Data->DPath.insert(User_Data->DPath.begin(), Temp.begin(), Temp.end());
しかし、これは機能し、
vector <directory_entry> DPath;
directory_entry TDE("Path");
vector <directory_entry> Temp;
Temp.push_back(TDE);
DPath.insert(DPath.begin(), Temp.begin(), Temp.end());
User_Data->DPath に問題はないと思います。プッシュ/ポップしてその中の要素にアクセスできるからです。しかし、何らかの理由で、範囲外のエラーを発生させずに挿入を使用できるように縫い合わせることができません。
これがなぜなのか誰か知っていますか?
編集:ポップアップが表示され、デバッグ アサーションが失敗しました。ベクター ヘッダー ファイルの 1111 行と、「式: ベクター イテレーターが範囲外です」というメッセージが表示されます。User_Data->DPath に少なくとも 1 つの要素があることを確認し、.begin+1 から開始すると、「式: ベクトル反復子 + オフセットが範囲外」と表示され、ベクトル ヘッダー ファイルの 157 行目が表示されます。 .
編集: あなたはおそらくすべて正しいです。g_new0 関数はメモリ割り当てhttp://developer.gnome.org/glib/2.32/glib-Memory-Allocation.html#g-new0を行います
struct_type : 割り当てる要素の型。n_structs : 割り当てる要素の数。戻り値: struct_type へのポインタにキャストされた、割り当てられたメモリへのポインタ。
typedef struct {
vector <directory_entry> DPath;
}State;
static gboolian select_dir (ClutterActor *actor, ClutterEvent *event, g_pointer data){
State *User_Data = (State*)data;
directory_entry Temp(Path);
User_Data->DPath.push_back(Temp);
...
return TRUE;
}
int main( argc, char*argv[]){
State *data = g_new0 (State, 1);
...
g_signal_connect(Cluter_Actor, "button-event", G_CALLBACK(select_dir), data)
...
clutter_main();
g_free(data);
return 0;
}