首页 新闻 会员 周边 捐助

C# 关于fixed关键字..用过的帮帮忙啊

0
悬赏园豆:10 [已解决问题] 解决于 2013-01-22 16:58

MSDN让的意思是,不希望GC回收某对象的时候,就用fixed把它固定着...

 

我遇到一种情况,就是程序需要不断读卡(死循环),读卡是调用一个非托管的DLL(C++)写的.

 

调用这个DLL的读卡方法的时候,读到卡就返回卡号,没有就返回null,每3秒读一次..

 

问题来了,返回的卡号或null会给C#的某变量,但是GC过一段时间回去回收一次内存,当刚刚回收到外部DLL返回的东西那块内存时,程序就挂了..这是同事告诉我程序挂的原因.

 

大家认为是这个原因吗?fixed关键字是不是用于这样的情况 ?把那个接收卡号的string变量定住?可是定的时候会编译不了..下边是个例子中的图..

 

 

这个fixed到底用在什么情况?具体怎么用啊?我找了MSDN,百度..花了2天时间也没弄清楚..求高手帮忙!谢谢了.

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2013-01-17 11:20
< >
分享
最佳答案
0

fixed(char* p

收获园豆:8
Launcher | 高人七级 |园豆:45050 | 2013-01-17 11:54

嗯,换成char就可以了,非常感谢,请问自定义的类型是不是不能用指针呢?

比如 一个类A

A a=new A();

fixed(A *p=a){}

fixed(A *p=&a){}

这2种写法都不对..

hexllo | 园豆:318 (菜鸟二级) | 2013-01-17 12:52

@hexllo: 不行。

Launcher | 园豆:45050 (高人七级) | 2013-01-17 13:09
其他回答(3)
0

不回收 用 static。 fixed 只是内存不移动。

有引用就不会回收,你的 变量为什么会回收?好像原因不是这个吧

收获园豆:2
Qlin | 园豆:2403 (老鸟四级) | 2013-01-17 11:32

说错了,不是回收,是移动..如果移动了有引用的变量,会不会报这个错啊?

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2013-01-17 12:50
0

如果你学过c++,就知道 string 实际上是 一个字符型指针,指向首字符的地址

这样写

fixed (char* b = "dfd")

{

}

建议你去学一下c/c++

微软首席软件架构师 | 园豆:202 (菜鸟二级) | 2013-05-28 17:04
0

错误的根本原因并不是fixed的使用,而是C#中指针类型没有String,参考msdn:

http://msdn.microsoft.com/zh-cn/library/y31yhkeb.aspx

TechLife | 园豆:184 (初学一级) | 2014-03-03 10:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册