由於某種原因,這不適用於我。它給了我向量迭代器超出範圍的錯誤。vector insert()錯誤:向量迭代器偏移量超出範圍
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開始,則會得到「Expression:vector iterator + offset超出範圍」,並且它會將矢量頭文件的第157行。
編輯:你們都可能是對的。該g_new0功能做內存分配http://developer.gnome.org/glib/2.32/glib-Memory-Allocation.html#g-new0
struct_type : the type of the elements to allocate. n_structs : the number of elements to allocate. Returns : a pointer to the allocated memory, cast to a pointer to 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;
}
如果您可以發佈錯誤消息,它可能會有所幫助。另外,如果您正在複製整個矢量,您可以考慮* copy和swap *成語或賦值運算符。 – dirkgently
我們需要知道User_Data是如何初始化矢量的,因爲所有這些代碼看起來都是有效的。 – pmr
希望你已經分配了內存給User_Data。另外,請發佈User_Data構造函數中的代碼或發佈結構本身。 – Superman