私は、次の機能を持たをallocated`いませんでした解放されています。文字列のコピーの関数の結果は
(私はこの機能を堅牢にしようとしているとして)私は、私はそれを使用する方法が重要であるべきとは思わないが、ここでいくつかの例は以下のとおりです。
CD::CD(char * s1, char * s2, int n, double x)
{
stringcopy(performers, s1);
stringcopy(label, s2);
selections = n;
playtime = x;
}
と
私は残念ながらCD::CD(const CD & d)
{
stringcopy(performers, d.performers);
stringcopy(label, d.label);
selections = d.selections;
playtime = d.playtime;
}
など
、関数を使用すると、次のエラーメッセージが表示されます。pointer being freed was not allocated
if (to != 0) { delete [] to; }
になると思います。
なぜこの行は非割り当てられたメモリを割り当て解除から保護しないのですか?
'to'は' stringcopy() 'に対してローカルです。呼び出し側の(ポインタ)値を変更できるようにするには、参照渡しまたはポインタを渡す必要があります。 –
@JohnBollinger - 私は 'char *'を使っていませんか?または、ダブルポインタを使用する必要がありますか? –
'char *'を値渡ししています。 'stringcopy()'はそのポインタ値のコピーを使用してポインタが指す 'char'を修正しますが、あなたがする必要があるポインタの呼び出し元のコピーを変更することはできません。だから私が言ったように、ポインタを参照渡しするか、ポインタを渡す必要があります(つまり 'char **')。 –