Повреждение кучи при освобождении памяти

У меня есть следующий класс

 struct CliHandler {
     CliHandler(int argc, char** argv);
     ~CliHandler();

     int doWork();

     int argc_; 
     char** argv_;  
     private:
     CliHandler(const CliHandler&){}
     CliHandler& operator=(const CliHandler&){} 
 };

// Конструктор

 CliHandler::CliHandler(int argc,
 char** argv) {
     //set command line parameters
     argc_ = argc; 

     argv_ = (char**) malloc(argc_ * sizeof(char*));

     for(int i=0; i<argc_; ++i)
     {
         std::cout<<sizeof(argv[i]); 
         argv_[i] = (char*) malloc(strlen(argv[i]) *
 sizeof(char));
         StrCpy(argv_[i], argv[i]);
     } }

// деструктор

 CliHandler::~CliHandler() {
     for(int i=0; i<argc_; ++i)
         free(argv_[i]); 
     free(argv_);  }

Во время отладки я получаю сообщение об ошибке «Обнаружено повреждение кучи. CRT обнаружила, что приложение написало в память после окончания буфера кучи. "Мой идентификатор вопроса" Где именно я делаю ошибку? Как мне ее исправить ". malloc (strlen (argv [i] + 1) * sizeof (char));

Что ужасно, так как увеличивает указатель argv [i] на единицу. Мой коллега указал на эту тонкую проблему. Это должно быть

argv_ [i] = (char *) malloc ((strlen (argv [i]) + 1) * sizeof (char));

5
задан Eternal Learner 9 May 2011 в 21:02
поделиться