Ошибка сегментации C++ std::list

У меня возникла ошибка сегментации (сброс ядра) при запуске моей программы. Первая версия работает отлично, но мне нужен список в качестве указателя, но тогда код больше не работает, см. второй код. Что я делаю неправильно?

Ходовая версия:

int main(int argc, char *argv[]) {

  std::list<int> TestList;
  for (int i = 0; i < 10; ++i) {
    TestList.push_back(i);
  }

  for (std::list<int>::const_iterator iterator = TestList.begin(), end = TestList.end(); iterator != end; ++iterator) {
    std::cout << *iterator << std::endl;
  }  

  return 0;
}

Не рабочая версия:

int main(int argc, char *argv[]) {

      std::list<int> *TestList;
      for (int i = 0; i < 10; ++i) {
        TestList->push_back(i);
      }

      for (std::list<int>::const_iterator iterator = TestList->begin(), end = TestList->end(); iterator != end; ++iterator) {
        std::cout << *iterator << std::endl;
      }  

  return 0;
}    


person JonasMu    schedule 11.12.2016    source источник


Ответы (2)


Второй не может быть запущен, так как нет объекта list<int>, а просто указатель, указывающий на произвольное пространство памяти.

Если вы хотите использовать указатель, сначала выделите область памяти.

person Junyoung Clare Jang    schedule 11.12.2016

Во второй версии TestList — это просто указатель, который не указывает ни на какие действительные объекты списка. Пытаться

std::list<int>* TestList = new std::list<int>();

Помните, что вам нужно правильно очистить память, выделенную кучей для списка, когда вы закончите.

person qutab    schedule 11.12.2016