释放intptr内存资源,是不是应该对内存清零?再次用这块内存的时候会返回上一次的数据

C#调用C++的dll时候用到的类

                public struct DBCSignal
    { 
             ...
        public Byte multiplexer_value;

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]
        public Byte[] unit;


        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public Byte[] strName;

        //[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 201)]
        public Byte[] strComment;


        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public Byte[] strValDesc;
    }
        public struct DBCMessage
    {
                public UInt32 nSize;   

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public DBCSignal[] vSignals; 

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public byte[] strName;

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 201)]
        public byte[] strComment;
    }

结构体传递的时候用到intptr指针

 IntPtr pt = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(DBCMessage)));
if (DBC_GetFirstMessage(m_hDBC,pt))
            {
                DBCMessage msg = (DBCMessage)Marshal.PtrToStructure(pt, typeof(DBCMessage));
                m_vMsg.Add(msg);
                                Marshal.FreeHGlobal(pt);//释放内存
                                while (DBC_GetNextMessage(m_hDBC,pt))
                {          
                    msg = (DBCMessage)Marshal.PtrToStructure(pt, typeof(DBCMessage));
                                        this.dataGridView1.Rows[index1].Cells[9].Value = Regex.Replace(System.Text.Encoding.Default.GetString(msg.strComment), @"\0", string.Empty);
                                        //怀疑再次用Marshal.PtrToStructure会把上一次的数据传给msg
                                }

在循环的时候Marshal.PtrToStructure为什么会把上一次循环的数据又传给msg呢?能不能把pt所指内存清零呢?

自己刚才试了在循环末尾加上Marshal.DestroyStructure可以释放
用Marshal.FreeHGlobal(pt)可能没有释放内部结构体,不能解决问题

释放内存不会将指针设置为0,也不会将释放的内存填0。因此释放以后还能访问能访问到很正常。