Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ .NETC++;使用旧语法的内存泄漏?_C++_.net_Syntax_Memory Leaks_Managed C++ - Fatal编程技术网

C++ .NETC++;使用旧语法的内存泄漏?

C++ .NETC++;使用旧语法的内存泄漏?,c++,.net,syntax,memory-leaks,managed-c++,C++,.net,Syntax,Memory Leaks,Managed C++,我正在处理应用程序中的内存泄漏问题。我将其缩小到旧语法来声明“Single”类型。创建了一个带有声明的测试应用程序,它在耗尽大量内存后崩溃。我错过了什么 测试代码如下: #include "stdafx.h" using namespace System; int main() { while(1) { System::Single * sngTemp = new System::Single(0.0); //System::String

我正在处理应用程序中的内存泄漏问题。我将其缩小到旧语法来声明“Single”类型。创建了一个带有声明的测试应用程序,它在耗尽大量内存后崩溃。我错过了什么

测试代码如下:

#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;
}
这不是“旧语法”与“新语法”的问题——C++/CLI也会有同样的行为
System::Single
float
的别名,可以在堆栈、非托管堆或托管堆上分配

在这里,因为您使用的是未修饰的
new
,所以您在非托管堆上分配了一个,即执行与以下操作完全相同的操作:

float* sngTemp = new float(0.0);
为什么人们不认为这会泄露呢?如果要进行垃圾回收,请使用托管分配
\uu gc new
旧语法);或者更好的是,根本不要在堆上分配值类型,这样就不会有问题。

这不是“旧语法”与“新语法”的问题——C++/CLI也会有同样的行为
System::Single
float
的别名,可以在堆栈、非托管堆或托管堆上分配

在这里,因为您使用的是未修饰的
new
,所以您在非托管堆上分配了一个,即执行与以下操作完全相同的操作:

float* sngTemp = new float(0.0);
为什么人们不认为这会泄露呢?如果要进行垃圾回收,请使用托管分配

\uu gc new
旧语法);或者更好的是,根本不要在堆上分配值类型,这样就不成问题了。

你的问题是什么?您肯定不是在问为什么代码会崩溃。你是在分配内存,而不是释放内存。问题是“为什么我只在使用gcnew时得到垃圾收集,而在使用new时没有?”delnan,我故意不释放内存。我期待GC做!!我错了吗?凯特,你的问题很接近我要问的问题。@MaheswaranRamados“gcnew”这个名字就是一个线索。这是C++,我们决定我们想要什么,不想要什么。你想要垃圾收集?使用gcnew。你想自己做吗?不要使用gcnew。你的问题是什么?您肯定不是在问为什么代码会崩溃。你是在分配内存,而不是释放内存。问题是“为什么我只在使用gcnew时得到垃圾收集,而在使用new时没有?”delnan,我故意不释放内存。我期待GC做!!我错了吗?凯特,你的问题很接近我要问的问题。@MaheswaranRamados“gcnew”这个名字就是一个线索。这是C++,我们决定我们想要什么,不想要什么。你想要垃圾收集?使用gcnew。你想自己做吗?不要使用gcnew。谢谢。我想这就清楚了。我希望System::Single与System::String等其他系统一样工作。我看到的区别是,Single被记录为一个结构,String被记录为一个类,这可能是一个需要的线索,如果它是GCed与否。再次感谢,谢谢。我想这就清楚了。我希望System::Single与System::String等其他系统一样工作。我看到的区别是,Single被记录为一个结构,String被记录为一个类,这可能是一个需要的线索,如果它是GCed与否。再次感谢你。