У меня есть класс следующим образом
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 обнаружил, что приложение записало в память после завершения буфера кучи.» Идентификатор моего вопроса «Где именно я делаю ошибку? Как мне ее исправить».Я использую visual stdio 2008.
Редактировать: я сделал что-то подобное, чтобы добавить 1
argv_ [i] = (char *) malloc (strlen (argv [i] +1) * sizeof (char));
Что ужасно, поскольку увеличивает указатель argv [i] на единицу.Мой сотрудник указал на эту тонкую проблему.Это должно быть
argv_ [i] = (char *) malloc ((strlen (argv [i]) + 1) * sizeof (char));