我有一些代碼似乎並不工作。C++ deque throw Segfaults
我想使一個deque(的結構),它是一個類的靜態成員。 骨架/基本代碼如下(I都保留所有數據類型 - my_typedef_fn是由typedef的-ING函數指針有一個數據類型):
1.H文件:
class A {
struct Bstruct {
char * b_name;
my_typedef_fn b_func;
}
static std::deque<Bstruct> a_deque;
static void func();
}
1.cpp文件:
std::deque<A::Bstruct> A::a_deque;
void A::func(char * name, my_typedef_fn fn) {
a_deque.push_front((Bstruct) {name, fn}); // <<<< segfault !
}
從我的理解 - .h文件只是聲明瞭的東西(像往常一樣) - 中的.cpp第一行初始化a_deque 靜態成員 - 功能func使用push_back添加東西到德克
但我得到一個分割錯誤在push_front被調用的線(使用gdb找到這個)。
而且,當我打印a_deque.size()之前push_front我的段錯誤 之前獲得4294967264當我使用計數雙端隊列的元素個數for循環:
int counter = 0
for(std::deque<Bstruct> it = a_deque.begin(); it != a_deque.end(); it++, counter++);
我的計數器顯示0元要在
所以,我不明白爲什麼我得到一個段錯誤,也不爲什麼.size()是一個大型垃圾數量
- 編輯1 - 添加函數的調用方式:
2.cpp
#include "1.h"
void fn1() {
// some code
}
A::func("abc", fn1);
它遵守了命令:
g++ -c -w -fpermissive -o 1.o 1.cpp
g++ -c -w -fpermissive -o 2.o 2.cpp
g++ -o final 1.o 2.o
爲什麼不使用'std :: string'而不是'char *'?鑑於此,「名稱」是什麼,它是如何得到其價值的?使用char *作爲字符串數據並不像看起來那麼無害。 – PaulMcKenzie 2014-12-05 19:54:58
構建元素的語法很奇怪。你的意思是'Bstruct {name,fn}'?我其實並不知道你的代碼是做什麼的,或者它爲什麼編譯,但它可能不是你想要的。 – 2014-12-05 19:55:06
你是否正在調用來自全局構造函數的代碼,這可能導致'a_deque'在它有機會初始化之前被訪問?請修正像A:BStruct這樣的句法問題。 – Angew 2014-12-05 19:58:48