Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
Pointers 当我减去BitmapData Scan0时,我的本机指针指向何处_Pointers_F# - Fatal编程技术网

Pointers 当我减去BitmapData Scan0时,我的本机指针指向何处

Pointers 当我减去BitmapData Scan0时,我的本机指针指向何处,pointers,f#,Pointers,F#,我以为ofNativeInt会返回一个指针,指向一个像1D数组这样的结构,所有的图像像素数据都存储在这个结构中。我期望程序在第一个周期后抛出异常,但它并没有,相反,它看起来是随机的,直到我在第一个周期中期望的空引用出现 let Test (img : Bitmap) = let bd = img.LockBits(Rectangle(0,0,img.Width,img.Height),ImageLockMode.ReadWrite,PixelFormat.Format32bppArgb

我以为ofNativeInt会返回一个指针,指向一个像1D数组这样的结构,所有的图像像素数据都存储在这个结构中。我期望程序在第一个周期后抛出异常,但它并没有,相反,它看起来是随机的,直到我在第一个周期中期望的空引用出现

let Test (img : Bitmap) = 
    let bd = img.LockBits(Rectangle(0,0,img.Width,img.Height),ImageLockMode.ReadWrite,PixelFormat.Format32bppArgb)
    let mutable (pointer:nativeptr<byte>) = NativePtr.ofNativeInt (bd.Scan0)

    for i in 1 .. Int32.MaxValue do
        printf "%d : %d\n" i (NativePtr.get pointer 2)
        pointer <- NativePtr.add pointer -4
    done
let测试(img:Bitmap)=
设bd=img.LockBits(矩形(0,0,img.Width,img.Height),ImageLockMode.ReadWrite,PixelFormat.Format32bppArgb)
let mutable(指针:nativeptr)=nativeptr.ofnativeinent(bd.Scan0)
因为我在1。。Int32.MaxValue do
printf“%d:%d\n”i(NativePtr.get指针2)

指针指针不安全,正常越界异常不会发生!如果幸运的话,您会点击一个受保护的页面并得到一个访问冲突异常,否则您只需读取该指针位置内存中发生的任何内容。

在上述示例中,什么是
p
?它也是指针吗?您似乎正在交换
p
指针
…谢谢,然后代码正在访问堆中分配的一些其他变量,对吗?建议读取:-)嗯,这里不一定分配了变量,可能只是空堆空间。指针甚至可能不指向堆,您可能会将其移动到堆栈或数据空间中。它正在访问内存中的某些东西,这就是你所能说的一切。