私はこのような構造を持っています、
struct int * ramp_output (int * L10)
{
int * r;
r = L10;
return(r);
}
L10 と r からメモリを解放する必要がありますか?
私はこのような構造を持っています、
struct int * ramp_output (int * L10)
{
int * r;
r = L10;
return(r);
}
L10 と r からメモリを解放する必要がありますか?
まず、コードはそこに漂遊した「構造体」を使用してコンパイルされません。それを削除すると、あなたの質問に答えることができます。それはパラメータがどのように割り当てられたかによって異なりますが、いずれの場合も一度だけ行う必要があります。
int main()
{
int a[] = { 1, 1, 1 };
int i = 42;
int* pi1 = &i;
int* pi2 = new int[10];
int* pi3 = new int(42);
std::vector<int> v( 10 );
std::shared_ptr<int> sp( new int(42) );
int* r1 = ramp_output(a);
int* r2 = ramp_output(&i);
int* r3 = ramp_output(pi1);
int* r4 = ramp_output(pi2);
int* r5 = ramp_output(pi3);
int* r6 = ramp_output(&v[0]);
int* r7 = ramp_output(sp.get());
// what to dealloc? Only these
delete [] pi2; // or delete [] r4; but not both!
delete pi3; // or delete r5; but not both!
}
他のすべては、何らかの方法で自分自身の後にクリーンアップします。
構造体は引数を取らず、値を返しません。コードから「構造体」を削除すると、これは有効な (簡単ではありますが) 関数になります。パラメーターがポインターであるのと同じものへのポインターを返すだけです。メモリを解放する必要はありません。
原則として、C++ でメモリを解放する必要があるのは、「new」キーワードを使用してメモリを作成したときだけです。例えば、
int * test = new int;
この場合、ポインター「test」は、「誰か」が削除すべきヒープ上の整数を指します。誰がそれを削除する責任があるかは、プログラムの設計によって異なります。ポインターを他の関数に渡し、それらがそのコピーを保存/使用する場合は、削除しないでください。
あなたのサンプルコードに関しては、それは本当に意味をなさないので、それを助けるために何をしようとしているのかを正確に伝える必要があります.