zoukankan      html  css  js  c++  java
  • System.StackOverflowException的一个例子(转)

    今天按着书上的例子写呀写,写了一下午终于做出了一个三层模式的通讯录(当然很简单),但是,弄了最后却碰到个运行时的

    异常,弄得我这个asp.net菜鸟郁闷了再郁闷.
    异常如下:
    发生类型为 System.StackOverflowException 的异常。
    看了网上的资料说是,由于递归调用了自己.编译能够通过,但是运行会产生异常.
    msdn上说:

    关于异常的疑难解答:System.StackOverflowException

    当嵌套的方法调用过多而导致执行堆栈溢出时,将引发 StackOverflowException 异常。

    相关提示

    确保您没有无限循环或无限递归。
    过多的方法调用通常意味着存在非常深的递归或无限递归。

    备注

    您无法捕捉堆栈溢出异常,因为异常处理代码可能需要堆栈。当普通应用程序中发生堆栈溢出时,公共语言运行库 (CLR) 会

    终止进程。

    承载 CLR 的应用程序可以更改默认行为并指定 CLR 卸载发生异常的应用程序域,但允许进程继续进行。有关更多信息,请

    参见 ICLRPolicyManager 和承载公共语言运行库。

    我找啊找,找了好久......最后,一段代码一段代码的去执行,再补充点辅助调试的代码....
    终于,发现了我这个类中当要得到CAddress这个值时就会引发异常.


    using System;

    namespace FSDataAccess
    {
     /// <summary>
     /// ContactEntry 联系人实体
     /// </summary>
     public class ContactEntry
     {
      private int cID;//联系人编号
      private string cName;//姓名
      private string cAddress;//地址
      private string cPhone;//电话
      private string cEmail;//电子邮件
      
      public ContactEntry()
      {
       //
       // TODO: 在此处添加构造函数逻辑
       //
      }


      /// <summary>
      /// 联系人编号
      /// </summary>
      public int CID
      {
       get{return cID;}
       set{cID=value;}
      }

      /// <summary>
      /// 姓名
      /// </summary>
      public string CName
      {
       get{return cName;}
       set{cName=value;}
      }
      /// <summary>
      /// 地址
      /// </summary>
      public string CAddress
      {
       get{return CAddress;}
       set{cAddress=value;}
      }
      /// <summary>
      /// 电话
      /// </summary>
      public string CPhone
      {
       get{return cPhone;}
       set{cPhone=value;}
      }
      /// <summary>
      /// 电子邮件
      /// </summary>
      public string CEmail
      {
       get{return cEmail;}
       set{cEmail=value;}
      }


     }
    }

    不知道您在看了上面的public string CAddress{}之后有没有发现错误.这里我把return CAddress;中的CAddress首字母大写

    了,应该是private成员cAddress,郁闷啊...想来,这里产生System.StackOverflowException 异常就不足为怪了(递归调用自

    己)...
    把public string CAddress{}
    改成  public string CAddress
      {
       get{return cAddress;}
       set{cAddress=value;}
      }
    就行了....学习今天到此为止..休息!!!

  • 相关阅读:
    [Python数据挖掘]第5章、挖掘建模(下)
    [Python数据挖掘]第5章、挖掘建模(上)
    [Python数据挖掘]第4章、数据预处理
    [Python数据挖掘]第3章、数据探索
    [Python数据挖掘]第2章、Python数据分析简介
    [C++ Primer Plus] 第11章、使用类(一)程序清单——重载 P408
    [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类
    opencv学习之路(41)、人脸识别
    opencv学习之路(40)、人脸识别算法——EigenFace、FisherFace、LBPH
    opencv学习之路(39)、PCA
  • 原文地址:https://www.cnblogs.com/weijieyun/p/6126139.html
Copyright © 2011-2022 走看看