хранение символьных указателей внутри вектора - PullRequest
0 голосов
/ 04 октября 2019

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

vector<char*> vec;

// here i store text for later
void pushToVector(const char *text) {
  char *t = new char[strlen(text)+1];
  strcpy(t, text);
  vec.push_back(t);
}

// now i want to print the first element and then erase it
void print() {
  if (vec.size() < 1) return;
  printf("print: %s", vec.front());
  char *t = vec.front();
  vec.erase(vec.begin(), vec.begin()+1);
  delete[] t;
}

Будет ли это работать всегда? или я что-то не так делаю?

1 Ответ

2 голосов
/ 04 октября 2019

Код вроде бы в порядке, хотя это довольно рискованный код. Вот небезопасные точки, которые я вижу:

  • Вы не проверяете, действительно ли параметр text является строкой с нулевым символом в конце
  • Работа с чистыми указателями
  • Нет явного владения строковым объектом в куче (я не ожидал бы, что функция print удалит что-либо)

Если вы не связаны со строками в стиле C, я настоятельно рекомендую использовать std::string.

...