MSDN让的意思是,不希望GC回收某对象的时候,就用fixed把它固定着...
我遇到一种情况,就是程序需要不断读卡(死循环),读卡是调用一个非托管的DLL(C++)写的.
调用这个DLL的读卡方法的时候,读到卡就返回卡号,没有就返回null,每3秒读一次..
问题来了,返回的卡号或null会给C#的某变量,但是GC过一段时间回去回收一次内存,当刚刚回收到外部DLL返回的东西那块内存时,程序就挂了..这是同事告诉我程序挂的原因.
大家认为是这个原因吗?fixed关键字是不是用于这样的情况 ?把那个接收卡号的string变量定住?可是定的时候会编译不了..下边是个例子中的图..
这个fixed到底用在什么情况?具体怎么用啊?我找了MSDN,百度..花了2天时间也没弄清楚..求高手帮忙!谢谢了.
fixed(char* p
嗯,换成char就可以了,非常感谢,请问自定义的类型是不是不能用指针呢?
比如 一个类A
A a=new A();
fixed(A *p=a){}
和
fixed(A *p=&a){}
这2种写法都不对..
@hexllo: 不行。
不回收 用 static。 fixed 只是内存不移动。
有引用就不会回收,你的 变量为什么会回收?好像原因不是这个吧
说错了,不是回收,是移动..如果移动了有引用的变量,会不会报这个错啊?
如果你学过c++,就知道 string 实际上是 一个字符型指针,指向首字符的地址
这样写
fixed (char* b = "dfd")
{
}
建议你去学一下c/c++