У меня есть код из проекта, который, похоже, не работает.C++ deque throwing Segfaults
Я пытаюсь сделать deque (of struct), который является статическим членом класса. скелет/основной код выглядит следующим образом (я сохранил все типы данных - my_typedef_fn это тип данных, приобретенный ЬурейеЕ-ки указатель на функцию):
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 !
}
Из моего понимания - The .h файл просто объявляет материал (как обычно) - Первая строка в .cpp инициализирует статический член a_deque - функция func добавляет материал в deque, используя push_back
Но я получаю ошибку сегментации в строке, где вызывается push_front (найденный с использованием gdb).
Кроме того, когда я печатаю a_deque.size() перед push_front я получаю 4294967264 до Segfault И когда я сосчитать число элементов в деке, используя для цикла:
int counter = 0
for(std::deque<Bstruct> it = a_deque.begin(); it != a_deque.end(); it++, counter++);
моего счетчик показывает 0 элементов быть в
Итак, я не понимаю, почему я получаю Segfault, ни почему .size() является большой мусор номер
- EDIT 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
Ваш синтаксис для построения элемента является странным. Вы имели в виду 'Bstruct {name, fn}'? На самом деле, я не знаю, что делает ваш код, или почему он даже компилируется, но это, вероятно, не то, что вы хотите. –
Вы вызываете код из конструктора глобального, что может вызвать доступ к 'a_deque', прежде чем у него будет возможность инициализировать себя? И, пожалуйста, исправьте такие синтаксические глупости, как «A: BStruct». – Angew