new String(char*)
和Marshal.PtrToStringUni(IntPtr)
之间的区别是什么,除了一个明显的事实,即一个需要char*
而一个需要IntPtr
?我什么时候应该使用哪个?
我记得在使用构造函数时,大约需要花费大量时间来追踪真正的随机访问冲突,当我使用{{1 }}。也许这不是真正的原因,我不知道,但它似乎是。
但是,我从来没有想过差异是什么。有什么想法吗?This question对我的大多数问题都有答案;但是:我的访问违规是否有任何解释,还是因为其他原因?
答案 0 :(得分:1)
根据链接的答案,我猜你没有将指针固定到char *,这导致(随机)让GC在构造函数仍在运行时移动char *,导致访问冲突。只是一个猜测:)
答案 1 :(得分:0)
不同之处在于,如果不放入不安全的代码,就无法使用指针。 char *是一个实际的指针。 IntPtr包装指针。
来自您链接的msdn:
“如果指定的数组不以空值终止,则此构造函数的行为取决于系统。例如,这种情况可能会导致访问冲突。”
你的char []是否以null结尾?