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;}
      }
    就行了....学习今天到此为止..休息!!!

  • 相关阅读:
    Linux 进程退出后自动启动
    Python UDP broadcast PermissionError: [Errno 13] Permission denied
    C# 获取MAC地址
    C# 多线程
    C# UdpClient 设置超时时间
    C# 控件聚焦
    C# 添加图片资源
    C# Listview 第一列不能居中
    Ubuntu 14.04 AM335x TI-RTOS 编译
    为AM335x移植Linux内核主线代码
  • 原文地址:https://www.cnblogs.com/weijieyun/p/6126139.html
Copyright © 2011-2022 走看看