Ошибка выполнения: _block_type_is_valid (phead-nblockuse)

Во-первых, я покажу вам свой код.

std::ifstream file("accounts/22816.txt");
if(file){
   char *str[50];
   int count=0;
   str[0] = new char[50];
   while(file.getline(str[count], 50)){
      count++;
      str[count] = new char[50];
   }
   for(int i=0;i<count;i++){
      std::cout << str[i] << std::endl;
   }
   delete[] str;  // Here is the problem
}

Поведение предыдущего кода:

  • Прочитайте содержимое текстового файла построчно.
  • Сохраните каждую строку в элементе 2D-массива.
  • Распечатайте элементы двумерного массива.
  • Наконец, удалите массив из памяти ‹‹ and this reason of the problem.

При тестировании мое приложение всегда выдает мне сообщение об ошибке времени выполнения _block_type_is_valid(phead- nblockuse).

Я знаю проблему, потому что это delete[] str;


person Lion King    schedule 29.07.2013    source источник


Ответы (1)


str — это массив указателей, каждый из которых указывает на динамически выделяемый массив.

Вам нужно перебрать его и вызвать delete [] для каждого элемента.

for(int i=0; i < count; ++i){
  delete [] str[i];
}

Примечание: я уже предоставил OP пример использования std::vector, std::string и std::getline.

person juanchopanza    schedule 29.07.2013