새 메모리를 만들고 생성자에서 사용하는 함수가 있습니다. 그러나 소멸자에서 그것을 삭제하는 방법에 액세스 할 수 있는지 모르겠습니다. 생성자에서C++의 함수로 인해 메모리 누수가 발생했습니다.
내가이 변경할 수 있어요 모든 통화 당 파일입니다
#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