首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

内存储器已损坏提示,解决马上给分

2012-07-15 
内存已损坏提示,解决马上给分直接贴代码:尝试读取或写入受保护的内存。这通常指示其他内存已损坏C# code //

内存已损坏提示,解决马上给分
直接贴代码:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏

C# code
 /// <summary>        /// 应用程序的主入口点。---------****在这里报这个错误        /// </summary>        [STAThread]        static void Main()        {            Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            Application.Run(new GUI());        }


C# code
 public partial class GUI : Form    {        DataTable m_GradeTable  = new DataTable();        Hashtable Axlist = new Hashtable();        public delegate void MyEventHandler(Object sender,EventArgs e);        public event MyEventHandler MyEvent;                public GUI()        {            InitializeComponent();            this.dataGridView1.AutoGenerateColumns = false;            this.bdsGrade.AutoGenerateColumns = false;            dataGridView1.DataSource = MachineInfoBLL.GetMachineInfoAll();            m_GradeTable.Columns.Add("序号", typeof(string));            m_GradeTable.Columns.Add("登记号或卡号", typeof(string));            m_GradeTable.Columns.Add("姓名", typeof(string));            m_GradeTable.Columns.Add("时间", typeof(string));            m_GradeTable.Columns.Add("设备名称", typeof(string));            m_GradeTable.Columns.Add("比对方式", typeof(string));            MyEvent += Connect;                 }        private void Form1_Load(object sender, EventArgs e)        {                   }        private void Connect(object sender,EventArgs e)        {                       Axzkemkeeper.AxCZKEM ax = (Axzkemkeeper.AxCZKEM)sender;            int rowindex = dataGridView1.CurrentCell.RowIndex;            string ip = dataGridView1.Rows[rowindex].Cells[3].Value.ToString();            int port = int.Parse(dataGridView1.Rows[rowindex].Cells[4].Value.ToString());            int commkey = MachineInfoBLL.GetMachinePWD(ip);                bool flag = false;                int errorCode = 0;                ax.SetCommPassword(commkey);                                flag = ax.Connect_Net(ip, port);                if (flag)                {                    ax.RegEvent(1, 32767);                    ax.OnAttTransactionEx += new Axzkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(ax_OnAttTransactionEx);                    dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1].Value ="已连接";                }                else                {                    ax.GetLastError(ref errorCode);                    MessageBox.Show("Unable to connect to device, Error Code: " + errorCode.ToString());                }                                            }              private void ax_OnAttTransactionEx(object sender, Axzkemkeeper._IZKEMEvents_OnAttTransactionExEvent e)        {            int dwMachineNumber = 0;            int dwinfo = 2;            int dwvalues = 0;            //MessageBox.Show("a");            Axzkemkeeper.AxCZKEM ax = (Axzkemkeeper.AxCZKEM)sender;            ax.GetDeviceInfo(dwMachineNumber, dwinfo, ref dwvalues);            DateTime now = DateTime.Parse(e.year + "-" + e.month + "-" + e.day + " " + e.hour + ":" + e.minute + ":" + e.second);           // MessageBox.Show("b");            if (CheckInOutBLL.AddCheckInOutInfo(e.enrollNumber, now, e.verifyMethod.ToString(), dwvalues.ToString(), now))            {                          if (e.verifyMethod == 1)                m_GradeTable.Rows.Add(new string[] { (bdsGrade.Rows.Count + 1).ToString(), e.enrollNumber.ToString(), e.enrollNumber.ToString(), now.ToString(), dwvalues.ToString(), "指纹验证" });            else                m_GradeTable.Rows.Add(new string[] { (bdsGrade.Rows.Count + 1).ToString(), e.enrollNumber.ToString(), e.enrollNumber.ToString(), now.ToString(), dwvalues.ToString(), "密码" });            this.bdsGrade.DataSource = m_GradeTable;                    }          //  MessageBox.Show("c");        }                private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)        {            if (e.Button == MouseButtons.Right)            {                if (e.RowIndex >= 0)                {                    //若行已是选中状态就不再进行设置                    if (dataGridView1.Rows[e.RowIndex].Selected == false)                    {                        dataGridView1.ClearSelection();                        dataGridView1.Rows[e.RowIndex].Selected = true;                    }                    //只选中一行时设置活动单元格                    if (dataGridView1.SelectedRows.Count == 1)                    {                        dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];                    }                    else                    {                                            }                    //弹出操作菜单                    contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);                }            }        }                private void 连接设备ToolStripMenuItem_Click(object sender, EventArgs e)        {            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GUI));            Axzkemkeeper.AxCZKEM ax = new Axzkemkeeper.AxCZKEM();                        int rowindex = dataGridView1.CurrentCell.RowIndex;            int eqpid = int.Parse(dataGridView1.Rows[rowindex].Cells[2].Value.ToString());            Axlist.Add(eqpid,ax);            this.Controls.Add(ax);            ax.Visible = false;            if (MyEvent != null)            {                MyEvent.BeginInvoke(ax, EventArgs.Empty, null, null);                for (int i = 0; i <= 100; i++)                {                    int a = i;                }                                        }        }        private void 断开设备ToolStripMenuItem_Click(object sender, EventArgs e)        {            int rowindex = dataGridView1.CurrentCell.RowIndex;            int eqpid = int.Parse(dataGridView1.Rows[rowindex].Cells[2].Value.ToString());            Axzkemkeeper.AxCZKEM ax = (Axzkemkeeper.AxCZKEM)Axlist[eqpid];            ax.Beep(150);            ax.Disconnect();        }             } 



[解决办法]
从你说的现象看,在load前就发生了错误,所以应是构造函数里面的问题,看看dataGridView1.DataSource = MachineInfoBLL.GetMachineInfoAll();里面是不是返回的空,这种错误用单步调试应该很容易就能找到问题症结的。
[解决办法]
Axzkemkeeper.AxCZKEM存在内存泄漏或者访问异常的情况。
[解决办法]
楼主我发了私信给你,有看到吗
[解决办法]
探讨
引用:
Axzkemkeeper.AxCZKEM存在内存泄漏或者访问异常的情况。

不是每次运行都会出这个错,时不时的会出,有时打断点也出,是不是我用多线程的问题呢?

[解决办法]
这样的错误一般是由于向一个非托管的代码写入了Null。
你检查一下哪个传的值为NULL了。获者传入之前看看。
[解决办法]
C# code
  public GUI()  {       try      {            InitializeComponent();            this.dataGridView1.AutoGenerateColumns = false;            this.bdsGrade.AutoGenerateColumns = false;            dataGridView1.DataSource = MachineInfoBLL.GetMachineInfoAll();            m_GradeTable.Columns.Add("序号", typeof(string));            m_GradeTable.Columns.Add("登记号或卡号", typeof(string));            m_GradeTable.Columns.Add("姓名", typeof(string));            m_GradeTable.Columns.Add("时间", typeof(string));            m_GradeTable.Columns.Add("设备名称", typeof(string));            m_GradeTable.Columns.Add("比对方式", typeof(string));            MyEvent += Connect;          }          Catch(Exception ex)          {  // 在这里设个断点看看哪行代码出的问题。              //.....           }           }
[解决办法]
探讨
难道是 GUI这个类在运行后调用构造函数初始时 比dataGridView1控件先初始化 先执行了数据绑定?

热点排行