-6

私はこのような構造を持っています、

struct int * ramp_output (int * L10)
{
    int * r;
    r = L10;
    return(r);
}

L10 と r からメモリを解放する必要がありますか?

4

3 に答える 3

0

まず、コードはそこに漂遊した「構造体」を使用してコンパイルされません。それを削除すると、あなたの質問に答えることができます。それはパラメータがどのように割り当てられたかによって異なりますが、いずれの場合も一度だけ行う必要があります。

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!
}

他のすべては、何らかの方法で自分自身の後にクリーンアップします。

于 2013-03-19T19:34:13.310 に答える
0

構造体は引数を取らず、値を返しません。コードから「構造体」を削除すると、これは有効な (簡単ではありますが) 関数になります。パラメーターがポインターであるのと同じものへのポインターを返すだけです。メモリを解放する必要はありません。

于 2013-03-19T19:30:14.900 に答える
0

原則として、C++ でメモリを解放する必要があるのは、「new」キーワードを使用してメモリを作成したときだけです。例えば、

int * test = new int;

この場合、ポインター「test」は、「誰か」が削除すべきヒープ上の整数を指します。誰がそれを削除する責任があるかは、プログラムの設計によって異なります。ポインターを他の関数に渡し、それらがそのコピーを保存/使用する場合は、削除しないでください。

あなたのサンプルコードに関しては、それは本当に意味をなさないので、それを助けるために何をしようとしているのかを正確に伝える必要があります.

于 2013-03-19T19:31:21.793 に答える