2011-12-21 4 views
1

私は自分のアプリでメモリリークの問題に取り組んでいます。私は 'Single'型を宣言するためにそれを古い構文に絞りました。宣言付きのテストアプリケーションを作成し、メモリをたくさん食べた後にクラッシュしています。私は何が欠けていますか?古い構文を使用した.NET C++メモリリーク?

テストコードここにされています。これは、「新しい構文」問題対「古い構文」ではありません

#include "stdafx.h" 

using namespace System; 

int main() 
{ 
    while(1) 
    { 
     System::Single * sngTemp = new System::Single(0.0); 
     //System::String ^sngTemp = gcnew System::String(S"dsfasdfasdf"); 
    } 
    return 0; 
} 
+0

あなたの質問がありますか?確かにあなたはそのコードがクラッシュする理由を尋ねていません。あなたはメモリを割り当てており、それを解放していません。 – delnan

+2

は「なぜ私はgcnewを使用するとガベージコレクションのみを取得し、新しいものを使用するのではないのですか」という質問です。 –

+0

delnan、私は意図的に解放していません。私はGCがすることを期待しています!私が間違っている? –

答えて

5

- C++/CLIは、同じ動作を持っているでしょう。 System::Singleは、floatの別名です。スタック、管理外ヒープ、または管理対象ヒープに割り当てることができます。ここで

あなたは装飾のないnewを使用しているので、あなたが管理されていないヒープ上の1を割り当てている、すなわち、全く同じこと:

float* sngTemp = new float(0.0); 

をなぜ一つは、これが漏れることを期待しないでしょうか?ガベージコレクションを使用する場合は、管理対象の割り当てを使用してください。
(旧式では__gc new)。ヒープに値型を割り当てないでください。これは問題ではありません。

+0

ありがとうございます。私はそれをクリアすると思います。私は、System :: SingleがSystem :: Stringなどの他のものと同じように動作することを期待していました。私が見ている違いは、SingleがStructure and Stringとしてクラスとして文書化されていることです。これは、GCedであるかどうかにかかわらず必要な手掛かりです。ありがとうございました。 –

関連する問題