出于某种原因,这对我不起作用。它给了我向量迭代器超出范围的错误。
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 中至少有一个元素,然后从 .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;
}