Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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# C中成员数组的内存#_C#_Arrays - Fatal编程技术网

C# C中成员数组的内存#

C# C中成员数组的内存#,c#,arrays,C#,Arrays,今天我已经编程一段时间了,我想我需要休息一下,因为我似乎无法理解这件非常简单的事情。非常感谢您的帮助 我有一个类(实际上是Form1)和一个成员数组int[,]f。 现在,我不管理它的内存,然后(也许我应该?)。 相反,在另一种方法中,我调用一个函数,比如: myFunction(f,.....); 这个函数类似于 void myFunction(int[,] f, ...some other arguments) { //.... f = new int[NX ,NY];

今天我已经编程一段时间了,我想我需要休息一下,因为我似乎无法理解这件非常简单的事情。非常感谢您的帮助

我有一个类(实际上是
Form1
)和一个成员数组
int[,]f
。 现在,我不管理它的内存,然后(也许我应该?)。 相反,在另一种方法中,我调用一个函数,比如:

myFunction(f,.....);
这个函数类似于

void myFunction(int[,] f, ...some other arguments)
{
    //....
    f = new int[NX ,NY];
    //....
}
如您所见,我在函数中为数组
f
分离内存


现在我的问题是,;当我离开myFunction时,这个内存会被垃圾回收吗?

首先,您必须了解一些非常重要的事情:

垃圾收集是随机进行的

第二,

只有那些没有引用变量的对象才有资格使用GC

第三,

f= new int[NX,NY];
您正在使
f
引用其他内容。原始的
f
仍由
Form1.f
引用。但是这个
newint[NX,NY]
对象现在只由方法中的本地
f
创建和引用

方法返回后,不应引用新的
f
(除非您将其分配到其他地方),因此新的
f
符合GC的条件。请注意,我说的是“变得符合GC条件”,而不是“垃圾已收集”


但是,由于
Form1
仍保留对原始
f
的引用,因此原始
f
在表单符合GC条件之前将不符合GC条件(除非您将其设置为其他内容).

它与
C++
有什么关系?因此函数中的f及其管理的内存不引用表1.f?它们是副本吗?(我从传递指针的角度来考虑它们)是的,您首先传递指针,直到您执行
f=new…
。此时,方法中的
f
引用了其他内容,而
Form1.f
的值不变@关西机器人