C#好像就是用
byte[] temp = new byte[10000];
来代替的,它好像没有堆分配的概念。它这样写分配的空间有垃圾收集机制来释放这些内存。不用自己释放。

解决方案 »

  1.   

    提醒你:
       在C#中,数组是引用类型哦!意味着数组本身就是在heap上分配的。这个与struct不同,它是值类型,在stack上分配.
    C#中有基本数据类型byte,表示无符号的8位整数呢.
    对于你需要显式的进行内存分配:
    1.堆栈分配  stackalloc();函数
      不能显式释放该函数申请的空间,而且该空间不受垃圾回收器管理.函数返回结束,自动释放空间
    2.动态内存分配  HeapAlloc //当然从kernel32导入的dll函数
      完全需要程序员对内存空间负责.
    以上代码应该都是 unsafe代码.而且C#规定指针只能指向诸如int,short,long ,double,enum等非托管类型,任何指向引用类型都是错误的.与引用类型不同,指针不受垃圾回收器跟踪的哦.程序员要负责到底.
      

  2.   

    多谢zhoutler(笑熬浆糊) !
       请问我用
       char* mychar = new char[2048];
       BITMAPINFO mybitmap  = new BITMAPINFO;//BITMAPINFO是VC中定义的一个存储BITBMP信息的一个结构。
       mybitmap  = (BITMAPINFO*)mychar ;
       请问上面的语句我用C#怎么实现?还有你说的unsafe代码内存回收能否讲的详细一点,推荐篇文章也好!谢谢!
      
      

  3.   

    直接使用 BITMAPINFO mybitmap  = new BITMAPINFO() 就可以。
      

  4.   

    没有那么简单,实际上是让mybitmap和mychar指向相同的地址,类型不同很难办。
      

  5.   

    1.定义BITMAPINFO类型
    [StructLayout(LayoutKind.Sequential)]
    public class BITMAPINFOHEADER
    {
        [FieldOffset(0)]
        public Int32 biSize;
        [FieldOffset(4)]
        public Int32 biWidth;
        [FieldOffset(8)]
        public Int32 biHeight;
        [FieldOffset(12)]
        public Int16 biPlanes;
        [FieldOffset(14)]
        public Int16 biBitCount;
        [FieldOffset(16)]
        public Int32 biCompression;
        [FieldOffset(20)]
        public Int32 biSizeImage;
        [FieldOffset(24)]
        public Int32 biXPelsPerMeter;
        [FieldOffset(28)]
        public Int32 biYPelsPerMeter;
        [FieldOffset(32)]
        public Int32 biClrUsed;
        [FieldOffset(36)]
        public Int32 biClrImportant;
    }[StructLayout(LayoutKind.Sequential)]
    public class BITMAPINFO
    {
        public BITMAPINFOHEADER bmiHeader;
        public IntPtr bmiColors;
    }
    2.
    int size = Marshal.SizeOf(typeof(BITMAPINFO));
    3.IntPtr ptrBitMap = Marshal.AllocCoTaskMem(size ); 
    4.BITMAPINFO mybitmap = (BITMAPINFO Marshal.PtrToStructure(ptrBitMap, typeof(BITMAPINFO));看看行不行
      

  6.   

    谢谢ggl165(ggl165) !!!    程序运行几分钟后,出现SEHException(结构错误)或Nullexception(未引用实例)这可怎么办呀?无法指向相应的代码呀!!!
        请问是什么原因引起的呢?结构中这句public IntPtr bmiColors;用指针代结构可以么?
      

  7.   

    谢谢ggl165(ggl165) !!!    又出现新问题,程序运行几分钟后,出现SEHException(结构错误)要么出现Nullexception(未引用实例)这可怎么办呀?无法指向相应的代码呀!!!
        请问是什么原因引起的呢?结构中这句public IntPtr bmiColors;用指针代结构可以么?