防止递归函数中出现 StackOverFlow

2023-11-25

我有一个递归函数BaseClass这依赖于一个protected virtual函数的返回条件。

子类可能会错误地覆盖此函数并导致StackOverFlow例外。最糟糕的是有一些缓慢的网络调用,并且异常不会很快发生(许多资源浪费了很长一段时间)。

我正在寻找一种方法来检查StackOverFlow在基类的早期阶段以某种方式(也许使用Reflection和当前的递归级别)。

任何想法 ?


您可以将一个简单的整数“深度”传递给递归函数,并在每次后续调用时递增它。如果它大于允许的最大深度,则立即抛出异常,而不是等到为时已晚并且可怕的StackOverflow发生异常。

这种安全机制(增量计数器,检查它是否大得愚蠢)也可以派上用场while循环中,一个小错误就可能导致无限循环,消耗大量 CPU。

在拥有许多用户的大型系统(例如网站)中,有时最好采取诸如递归和 while 循环之类的预防措施,因为后果可能远远超出一个网页或系统的一个用户。这不是漂亮的代码,纯粹主义者无疑会犹豫不决,但它很高效,具有防御性,而且很实用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止递归函数中出现 StackOverFlow 的相关文章

  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 私有模板函数

    我有一堂课 C h class C private template
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 错误:未创建 Firebase 应用程序“[DEFAULT]” - 调用 Firebase App.initializeApp()

    我有一个 Firebase 数据库 它链接到两个应用程序 一个是 iOS 应用程序 另一个是用 Node js 编码的 Web 应用程序 这是一种将数据设置到数据库的基本算法 当我运行算法时 我会遇到 错误 未创建 Firebase 应用程
  • 将 R 的“by”命令的输出转换为数据帧

    我正在尝试使用 Rby获取数据框子集的列平均值的命令 例如 考虑这个数据框 gt z data frame labels c a a b c c data matrix 1 20 nrow 5 gt z labels data 1 data
  • 远程访问docker容器中的web服务器

    我已经开始使用 docker 进行开发 设置如下 主机 ubuntu 服务器 Docker 容器 带 Tomcat 服务器的 Web 应用程序 使用 https 就主机容器访问而言 一切正常 However 我无法从远程计算机访问容器的 w
  • Java多维数组转字符串和字符串转数组

    我有数组 data 转换为字符串 string Arrays deepToString data string 1 1394119227787 59474093 USD DKK true 0 05 5 391582 5 00663 5 39
  • 如何设置onLongPress的持续时间

    I know onLongPress会在一段时间 如 500 毫秒左右 后触发 但我想做的是当用户按下按钮 3 秒左右时触发一些操作 实际上我想设置持续时间onLongPress ElevatedButton onPressed gt pr
  • Coinbase API client.getAccount(...) 开始返回:“错误:无法获取本地颁发者证书”[重复]

    这个问题在这里已经有答案了 该问题于太平洋时间 2020 年 3 月 31 日上午晚些时候开始 对 Coinbase 进行 API 调用的服务器托管在带有 node js GCP 的 Google App Engine 上 几周前 Coin
  • 没有为运行配置定义 SDK

    当我尝试在 PyCharm 中运行我的项目时 出现错误 SDK 未定义运行配置 我尝试设置一个新的翻译并尝试了一切 SDK 是什么意思以及在哪里可以配置它 我刚刚遇到了同样的问题 请参阅上面的评论 对我有用的是进入 编辑配置 删除从原始电脑
  • 哪个 gem 破坏了 Rails application.css.scss 参数数量错误 3 为 2

    好的 这是gem更新引起的新问题 调用 Bundle update 会破坏我的 Rails 应用程序 以下是更改的宝石 Gemfile lock compass 0 12 7 compass 0 12 2 sass gt 3 2 19 sa
  • 在 Windows 8 桌面应用程序上使用 MediaCapture

    在 Windows 8 桌面应用程序上 我需要使用 C 4 5 中的相机拍照 我尝试使用 CameraCaptureUI 类 但它在桌面应用程序上不可用 所以我尝试使用 MediaCapture 类 它可用于 Metro 应用程序或桌面应用
  • 朱利安方法来执行Python的yield(以及yield from)

    朱利安的收益率 以及收益率 方法是什么就像蟒蛇一样 编辑 我将尝试在 python 中添加小示例 想想 4x4 棋盘 找出国际象棋王可以走的每N步长路径 不要浪费内存 gt 为每条路径生成生成器 如果我们用数字签署每个位置 0 1 2 3
  • 在实现中重新包含标头

    假设我有一个标题foo h像这样 ifndef FOO H define FOO H include
  • Spinner 无法加载整数数组?

    我有一个应用程序 其中有一个微调器 我想用一些数字 4 8 12 16 填充它 我使用上述项目在 strings xml 中创建了一个整数数组对象 将 Spinner 的条目设置为整数数组 当我运行应用程序时 我得到 04 19 23 38
  • Vnext 参数 1:无法从“string”转换为“System.IO.Stream”

    我正在尝试创建一个Next 项目中的通用序列化器当我调用 StreamWriter 的构造函数时 它会抛出此编译器错误 错误 CS1503 参数 1 无法从 字符串 转换为 System IO Stream Test ASP NET Cor
  • 从 Javascript 更改 CSS 规则集

    是否可以动态更改 CSS 规则集 即 当用户单击小部件时 某些 JS 会更改 CSS 规则集 这个特定的 CSS 规则集应用于页面上的许多元素 通过类选择器 我想在用户单击小部件时对其进行修改 以便所有具有class change 可以 但
  • 使用 Asp.net 路由的 IRouteHandler.GetHttpHandler 中的会话为 null

    我试图在 IRouteHandler 类的 GettHttpHandler 方法中启用会话 但会话始终为空 有人可以告诉我我做错了什么吗 在 global asax 我有 RouteTable Routes Add All new Rout
  • 多次加载 DLL?

    我正在使用LoadLibrary在 Windows 中加载 DLL 的函数 我的问题是 如果我对同一个 DLL 多次调用此方法 我是否会获得该 DLL 的不同实例的句柄 或者它们都引用同一个实例 此外 这种行为与 Linux SO 文件有何
  • 有什么解决方案可以将验证码添加到 Django-allauth 吗?

    有没有将验证码与 django allauth 一起使用的解决方案 我想在注册表上使用验证码进行标准电子邮件 密码注册 我也需要用 django allauth 来做到这一点 并发现实现django recaptcha封装起来比较简单 配置
  • Node.js (ES6 / Babel) 中 import X 和 import * as X 的区别?

    我有一个 Node js 库lib用 ES6 编写 编译为Babel 其中我导出以下子模块 use strict import as config from config import as db from db import as sto
  • 编译时按架构排除go源文件

    我正在为 Windows 编写一个 Go 程序 其中包含多个包 其中一个包是使用 CGo 调用一些 h 和 c 文件中定义的一些函数 这些 c 文件依赖于 windows h 由于在 Windows 平台上开发非常繁琐 我想制作这个文件中的
  • 防止递归函数中出现 StackOverFlow

    我有一个递归函数BaseClass这依赖于一个protected virtual函数的返回条件 子类可能会错误地覆盖此函数并导致StackOverFlow例外 最糟糕的是有一些缓慢的网络调用 并且异常不会很快发生 许多资源浪费了很长一段时间