У меня есть следующий класс
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));