托管语言如何确保没有段错误
How does managed language ensure no segfault
据我所知(如果我错了,请纠正我),托管语言(或至少 C#)不会产生任何segfault
(至少在没有Unsafe
或直接处理unmanaged memory
时)。这与非托管语言(或至少C++)相反,在非托管语言中,您只需在编码时查看您附近的猫一秒钟即可获得segfault
。
问题是:托管语言如何确保这一点?他们的运行时库是否构建和测试得如此仔细。或者他们有办法抓住这些段错误并以某种方式处理它?
这个问题背后的动机:我有调用本机C++库的 C# 应用程序(两者都是由我构建的)。当我的C++DLL出现段错误时,整个应用程序都会关闭(某些服务会关闭),这根本不是一件好事。我知道,当出现段错误时,这意味着有些事情做错了,需要纠正。但是,当错误(可能导致段错误)C++DLL在客户机器上工作时,至少我想要一些机制来解决此问题。
- 它们不允许您手动释放内存。
- 它们不允许您从任意内存地址读取/写入(C++也不允许这样做,但语言语法使之成为可能)。
- (作为上述的特殊形式)它们检查每个数组访问是否在数组的边界内
- 据我所知,他们没有未定义的bahavior(除了courese,当调用不安全的代码时)
当错误(可能导致段错误)C++DLL在客户机器上工作时,我想要一些机制来解决此问题。
问题是,即使你可以允许你的程序继续(我不知道Windows/c#是否提供了任何机制来做到这一点),它也可能不再处于有效状态,所以根据错误是什么以及你程序可以访问的资源类型,这实际上可能导致比程序崩溃更严重的错误, 包括销毁用户数据。
相关文章:
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 如何摆脱C ++中的分段错误错误?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 如何解决分段错误错误C++
- 作为参数模板的模板类:MSVC 错误 - 错误 C2977:模板参数过多 (C++98)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 卷曲给出分段错误错误
- 无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"
- 错误错误 C2872:"布尔值":kinect.h 的不明确符号
- C++打印模板容器错误(错误:"运算符<<"的不明确重载)理解?
- 结构的分割错误错误
- 为什么此代码返回分段错误错误?
- 错误错误:无法编译内置功能
- 分段错误错误C++
- C++ 1Z 错误:错误:演绎指南中声明中的显式限定
- 使用对数据类型的向量的哈希表中的分段错误错误
- 为什么此代码会导致分段错误错误
- JNA结构字段值错误
- C++段故障错误