скопировать символ * в другой символ ** с помощью динамического выделения - PullRequest
0 голосов
/ 10 октября 2018

Я все еще новичок в этой теме, но может кто-нибудь объяснить мне, как я могу скопировать один символ * в другой символ ** в качестве параметра без утечек памяти?

void Hardware::copyString(char** dest, const char* source)
{
  size_t length = strlen(source);
  auto string = new char[length+1];
  strncpy(string, source, length);
  string[length] = '\0';
  *dest = string;
  //need to be freed
  free(string); //if i free here the data would getting lost
}

и ctor:

Hardware::Hardware(const char* name, int cost)
{
 copyString(&name_, name);
 cost_ = cost;
}

main.cpp

Hardware hard("CPU", 250)

Где я должен освободить это без утечек памяти и иметь правильный вывод?

1 Ответ

0 голосов
/ 10 октября 2018

Независимо от проблем в вашей реализации, простым ответом на ваш вопрос будет освобождение его в деструкторе.

Если вы не хотите выставлять переменную name_, вы можете free ее внутри деструктора класса Hardware.

Hardware::~Hardware()
{
    delete[] name_;
}

Если вы freeнаходится внутри самой функции, вы удаляете выделение кучи, даже если вы передаете разные переменные, потому что они указывают на одну и ту же область памяти.

Но, как и другие предлагали, лучший способРабота со строками заключается в использовании std::string.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...