CLR 4.0 拾遗系列1.1 System.AccessViolationException-程序员宅基地

技术标签: runtime  

Namespace:

System

 

Class:

System.AccessViolationException

 

Remarks:

An access violation occurs in unmanaged or unsafe code when the code attempts to read or write to memory that has not been allocated, or to which it does not have access. This usually occurs because a pointer has a bad value. Not all reads or writes through bad pointers lead to access violations, so an access violation usually indicates that several reads or writes have occurred through bad pointers, and that memory might be corrupted. Thus, access violations almost always indicate serious programming errors. In the .NET Framework version 2.0, an AccessViolationException clearly identifies these serious errors.

In programs consisting entirely of verifiable managed code, all references are either valid or null, and access violations are impossible. An AccessViolationException occurs only when verifiable managed code interacts with unmanaged code or with unsafe managed code.

 

Samples:

using System;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("ole32.dll")]
    public static extern UInt32 StgCreateStorageEx(
        [MarshalAs(UnmanagedType.LPWStr), In]
        string pwcsName,
        long grfMode, //TODO grfMode should have been an int not a long
        int stgfmt,
        uint grfAttrs,
        [In]
        IntPtr pStgOptions,
        [In]
        IntPtr reserved2,
        [In]
        ref Guid riid,
        [MarshalAs(UnmanagedType.IUnknown), Out]
        out object ppObjectOpen
        );

    public const int STGM_READWRITE = 0x00000002;
    public const int STGM_SHARE_EXCLUSIVE = 0x00000010;
    public const int STGFMT_STORAGE = 0;

    [HandleProcessCorruptedStateExceptions]
    static void Main(string[] args)
    {
        try
        {
            IntPtr ptr2ptr2ptr = Marshal.AllocHGlobal(IntPtr.Size);
            IntPtr ptr2ptr = Marshal.AllocHGlobal(IntPtr.Size);
            IntPtr ptr2data = Marshal.AllocHGlobal(104857600);
            Marshal.WriteIntPtr(ptr2ptr, ptr2data);
            Marshal.WriteIntPtr(ptr2ptr2ptr, ptr2ptr);
            Guid IID_IStorage = new Guid("0000000B-0000-0000-C000-000000000046");
            UInt32 results;
            object ppObjectOpen;
            results = StgCreateStorageEx(null, STGM_READWRITE + STGM_SHARE_EXCLUSIVE, STGFMT_STORAGE, 0, 
                IntPtr.Zero, IntPtr.Zero, ref IID_IStorage, out ppObjectOpen);
        }
        catch (AccessViolationException ex)
        {
            Console.WriteLine(ex.Message);
            Console.WriteLine(ex.StackTrace);
        }

        Console.WriteLine("Press any key to continue...");
        Console.ReadKey(true);
    }
}

 

References:

  1. AccessViolationException Class
  2. StgCreateStorageEx in C# gives AccessViolationException
  3. StgCreateStorageEx (ole32)
  4. StgCreateStorageEx Function
  5. How to handle AccessViolationException
  6. Handling Corrupted State Exceptions

转载于:https://www.cnblogs.com/pagsun/archive/2011/04/08/clr4_system_access_violation_exception.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30682127/article/details/99190639

智能推荐

Kubuntu kde 好用的 快捷键_kde6 快捷键-程序员宅基地

文章浏览阅读7.9k次。1 krunner一般情况,这个东西可以呼唤出来,如果吧焦点设置在桌面上,但是当我们的焦点在其他应用中,敲击键盘上的字符就千呼万唤不出来了。一直都不知道怎么吧这个东西找出来,今天终于找到了解决方案。这个东西较 krunner。http://en.wikipedia.org/wiki/Run_command 既然找到了,我们把它加到系统的快捷键中。在 trigger 中添加对应的快捷_kde6 快捷键

SSL/TLS详解-程序员宅基地

文章浏览阅读3k次,点赞5次,收藏20次。面试问到Https加密协议,不太会?来看看这篇文章吧_ssl/tls

计算机网络——网线制作和局域网组建_网线制作和局域网组建实验-程序员宅基地

文章浏览阅读5.1k次,点赞10次,收藏40次。一、实验目的: 了解双绞线特性,掌握双绞线的分类与典型应用。 熟悉无屏蔽双绞线网线制作的标准和方法。 了解网线制作的技能技巧。 掌握测试仪的使用。 利用做好的网线通过交换机或路由器组建局域网。二、实验内容: 无屏蔽双绞线网线制作。 利用做好的网线通过交换机或路由器组建局域网。..._网线制作和局域网组建实验

小程序二维码和小程序带参数二维码生成-程序员宅基地

文章浏览阅读3.2k次。本文主要讲解小程序二维码的基本概念,帮助开发和运营人员更好的掌握小程序参数二维码,同时也包含小程序二维码官方文档解读,更好的掌握小程序参数二维码在业务中的使用一,小程序二维码小白介绍二,小程序二维码开发介绍三,小程序二维码生成介绍四,小程序二维码官方文档解读 一,小程序参数二维码小白篇介绍参数二维码的基础知识,让开发者和运营者知道什么是参数二维码1. 首先我们要了解,什...

Java实现登录与注册页面_java写登录注册页面-程序员宅基地

文章浏览阅读2.8w次,点赞23次,收藏205次。用java实现的登录与注册页面,实现了客户端(浏览器)到服务器(Tomcat)再到后端(servlet程序)数据的交互。注册的html代码,页面非常丑!!请见谅。。<body><fieldset id=""> <legend>注册页面</legend> <form action="/day02/register2" method=..._java写登录注册页面

fcode-页面九宫格自动锁屏jquery插件-程序员宅基地

文章浏览阅读80次。fcode.js 自动锁屏插件fcode.js是什么?fcode.js是一款web页面九宫格自动锁屏js插件,依赖于jquery,会在设置的范围里,判断用户有无操作,然后执行锁屏的功能。就一个js文件,配置简单,操作方便,可以锁住任何页面,还支持在手机端的锁屏。此外,还支持更新密码,或者用来登录,都有相关的说明,特别简单,相信您看一下,就会明白!演示地址:ht...

随便推点

html5制作涂鸦板,HTML5实现涂鸦板-程序员宅基地

文章浏览阅读1.3k次。最近闲的,看了看html5,强大的绘图功能让我惊奇,于是,写了个小玩意---涂鸦板,能实现功能有:画画,改色,调整画笔大小html5的绘图可以分为点,线,面,圆,图片等,点和线,这可是所有平面效果的基点,有了这两个东西,没有画不出来的东西,只有想不到的算法。先上代码了:html效果:好了,一个简陋的画图界面就搞好啦,下面开始写一些画线的代码$.Draw = {};$.extend($.Draw, ..._html涂鸦板

Ubuntu管理文件所有权和用户权限_ubuntu python生成的文件权限用户设置-程序员宅基地

文章浏览阅读1k次。简析chown和chmod用法 简析chown和chmod用法修改文件所有权--chown更改文件权限--chmod修改文件所有权–chown计算机网络实验在执行完python脚本后,由于以sudo模式启动,生成的文件夹所有者为root,文件夹右下角有小锁,其他用户没有访问修改的权力。用到语句:chown [选项] [更改目标所有者][:[更改目标组]] 文件名或:chown [选项] ..._ubuntu python生成的文件权限用户设置

用物理学突破深度学习理论瓶颈? Google-斯坦福发布《深度学习统计力学》综述论文,30页pdf阐述深度学习成功机制...-程序员宅基地

文章浏览阅读679次。来源:专知【导读】深度学习革新了很多应用,但是背后的理论作用机制一直没有得到统一的解释。最近来自谷歌大脑和斯坦福的学者共同在Annual Review ..._深度学习和力学理论结合

python画图保存成html格式、用浏览器打开页面为空白_无法在web浏览器中从python打开html文件,而是打开记事本...-程序员宅基地

文章浏览阅读1.0k次。Note that on some platforms, trying to open a filename using this function, may work and start the operating system’s associated program. However, this is neither supported nor portable.这里的问题是webbrows..._drawings保存html格式是空的

html5做在线音乐,html5实现在线响应式音乐播放器-程序员宅基地

文章浏览阅读915次。大概很早的时候就有想法做一个音乐播放器玩玩,以前可能还考虑过做APP,大一的时候第一个html的静态页面也是做的音乐网站,想想,大概小时候比较喜欢音乐吧。然而,现在入了前端大坑,就用h5做一个耍耍好了。功能不多,UI不美,But,练习了html5中audio及其API的使用。欢迎吐槽~功能思路分析用了这么多年的音乐播放软件,目前已是网易云音乐的重度用户。一个基本的音乐播放器基础功能有:播放、暂停、..._html5音乐播放器

001 unique string_uniquestring-程序员宅基地

文章浏览阅读952次。以后坚持每个星期都写记到算法题,不论简单还是难,纯熟娱乐!描述:实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)代码:#include #include #include #include bool isUnique(const std::string& vStr){ if (vStr.size() _uniquestring