新しいメモリを作成してコンストラクタで使用する関数があります。 しかし、私はそれを削除するためにデストラクタでそれにアクセスする方法を知らない。コンストラクタでC++の関数によるメモリリーク
は私が変更させていただくすべての.cppファイルである
#include <string.h>
#include "Player.h"
// TODO: Fix the bugs in this file
Player::Player(const char* name) : name_(0)
{
copyString(&name_, name);
}
Player::Player(const Player& copy) : name_(0)
{
name_ = copy.name_;
}
Player::~Player()
{
delete [] name_; // Not sure if it works. errors promts- double free
}
Player& Player::operator=(const Player& copy)
{
return *this;
}
void Player::copyString(char** dest, const char* source)
{
unsigned int str_len = strlen(source);
char* str = new char[str_len+1]; //This line
strncpy(str, source, str_len);
str[str_len] = '\0';
*dest = str;
}
std::ostream& operator<<(std::ostream& out, const Player& player)
{
out << player.name_ << std::endl;
return out;
}
(同じファイル)player.cppに使用されています。 削除行iデストラクタを追加しましたが、エラーが表示されます。
'delete [] name_;'?より情報に基づいた答えを得るために、クラス定義を含め、より多くのコードを投稿する必要があります。 –
'name_'がそのメモリを指している場合、' [[name_;]を削除できませんか?実際のプロジェクトでは 'std :: string'を、ポインタを持たないポインタではなくスマートポインタを使うことを検討してください。 –
カスタムデストラクタを持っている(または必要としている)ようです。いくつかは、次のカップルのバグとは何かを試してみるために読んでいます:[3のルールとは何ですか?](https://stackoverflow.com/questions/4172722/what-is-the-rule-of-three) – user4581301