c# - 获取指向字节数组的指针的不安全方法

标签 c# pointers unsafe

此行为在 C# 中是否有效

public class MyClass
{
    private byte[] data;
    public MyClass()
    {
        this.data = new byte[1024];
    }
    public unsafe byte* getData()
    {
        byte* result = null;
        fixed (byte* dataPtr = data)
        {
            result = dataPtr;
        }
        return result;
    }
}

最佳答案

如果您要关闭安全系统,则您有责任确保程序的内存安全。一旦您这样做,您必须在没有安全系统帮助您的情况下安全地完成所有操作。这就是“不安全”的意思。

正如 C# 规范明确指出的那样:

the address of a moveable variable can only be obtained using a fixed statement, and that address remains valid only for the duration of that fixed statement.

您正在获取可移动变量的地址,然后在固定语句的持续时间后使用它,因此该地址不再有效。因此,您被特别要求不要做您正在做的事

在您对必须遵守的规则有透彻而深刻的理解之前,您不应编写任何不安全的代码。从阅读规范的第 18 章开始。

关于c# - 获取指向字节数组的指针的不安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10076262/

相关文章:

c - 如何输入n行每行m个字符的字符串,其中可能包含空格作为字符?

c - 我如何指向另一个指针然后增加第一个指针的值而不更改第二个指针的值

java - 使用 Unsafe 时未报告的异常

c# - 如何保证数据一致性

c# - HTTP 和 HTTP WCF 服务

c# - ElasticSearch.NET NEST 搜索<T> url

c - C 中指向数组元素的指针

rust - 您能否在Rust中将原始指针转换为具有生存期的引用?

C# - MemoryMarshal.Cast() 能否在 Linux 和 Windows 上转换任何具有兼容字节序的结构或原语

c# - 用c#重复控件