3

私はいくつかの調査を行っていますが、まだ私の問題の解決策を見つけることができません。私の知る限り、関数の外部で変数を宣言すると、それらはヒープ内に割り当てられ、そのメモリは実行が終了するまで解放されません。delete特に関数でそうしない限り。コードの先頭で宣言された変数を解放するために次の関数を試しましたが、どれも機能しませんでした(dbgdel.cppでデバッグエラーが発生しました):delete、、。私は何が間違っているのですか?delete []free()

要約されたバージョンのコードの下に貼り付けます。どんな助けでも大歓迎です。ありがとうございました!

(グローバル変数は通常、適切なプログラミングでは望ましくないことはわかっていますが、私のコードではありません。そのまま修正しようとしています。)

#include <stdio.h>
#include <conio.h>
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
#include "Viewer.h"
....    
// Arrays
float z_base [5201][5201];
....

uchar maskThreshold [5200][5200];
...


void main(){
.....       
     delete [] z_base;
     //free (z_base);
     //delete z_base;
     //free (&z_base);    
} 
4

3 に答える 3

6

私の知る限り、すべての関数の外部で変数を宣言すると、それらはヒープ内に割り当てられます

本当じゃない。一般に、呼び出す必要があるのは、またはdeletedelete[]メモリを割り当てた場合のみです。newnew []

于 2013-01-21T12:10:34.347 に答える
4
  1. (C ++では)ヒープはありません。
  2. 実行が終了すると、すべてのメモリが解放されます。
  3. delete何をnewdelete[]何をnew[]
  4. void main間違っています(mainはintを返す必要があります)。

以上です。

于 2013-01-21T12:11:59.107 に答える
3

あなたはそうしない。ランタイムがあなたに代わってそれを行います。経験則として、必要なのは。delete/delete[]で割り当てたものだけですnew/new[]

また、グローバルはヒープではなく静的メモリに割り当てられることに注意してください。

于 2013-01-21T12:10:15.460 に答える