現在、私はC++のメモリ管理に関する問題に直面しています。その割り当てられた(新しい)オブジェクトをスコープの外に削除します
for(auto &person : persons)
...
SomeClass::cpy(&(person.name_), new_name);
...
私の問題は、その範囲の外でTMP変数を削除することであるように
void SomeClass::cpy(char** dest, const char* origin)
{
int len = strlen(origin);
char* tmp = new char[len+1];
strncpy(tmp, origin, len);
tmp[len] = '\0';
*dest = tmp;
}
関数呼び出しが見えます。私はその価値が必要なので、この範囲の終わりにそれを削除することはできません。 delete[] name_;
でクラスのデストラクタを使用すると、メモリに違反しているようです。
スコープの外に何を意味するのですか? –
私は、手動メモリ操作とポインタをmuckingするのではなく、 'std :: string'と参照パラメータを使うことを強くお勧めします。 – NathanOliver
私は関数内にtmpを割り当てているので、どこからでもそれを削除することはできません。 – Mer0winger