У меня есть структура, которая содержит std :: list. В моем коде я пытаюсь перебрать этот список, но получаю некоторые нечетные результаты.std :: list.begin(), дающий нулевой указатель
struct my_struct_t {
std::list<int> my_list;
//More fields
};
Это моя структура, как определено в моем файле заголовка.
И некоторые примеры кода в файле, который включает в себя этот заголовок будет:
std::list<int>::iterator my_iterator;
struct my_struct_t* test_struct = (struct my_struct_t*) malloc(sizeof(struct my_struct_t));
my_iterator = test_struct->my_list.begin();
printf("Beginning of list address: %p\n", my_iterator);
my_iterator = test_struct->my_list.end();
printf("End of the list address: %p\n", my_iterator);
printf("Address of the list: %p\n", &(test_struct->my_list));
Этот код компилируется и работает нормально, но результат будет что-то вроде:
Beginning of list address: (nil)
End of the list address: 0x86f010
Address of the list: 0x86f010
Последние два линии имеют для меня смысл, поскольку список должен быть пустым. Но как/почему я получаю нулевой указатель для начала? Как я могу это исправить?
Шаг 1: прочитайте хороший C++-праймер, выберите один из них (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). Шаг 2: поймите, что, несмотря на множество сходств, C++ и C - очень разные языки и только по-своему похожи по своим недостаткам. –