try catch exceptions in unsafe code
我正在编写一些图像处理代码,并使用C进行低级别像素操作。每隔一段时间,就会发生AccessViolationException。
有几种方法可以解决这个典型的问题,有些人认为代码应该写得很牢固,这样就不会有访问冲突异常,而且就我而言,应用程序运行得很好,但是我想添加一个try catch,这样如果发生什么事,应用程序就不会以一种非常丑陋的方式失败。
到目前为止,我已经输入了一些示例代码来测试它。
1 2 3 4 5 6 7 8 | unsafe { byte* imageIn = (byte*)img.ImageData.ToPointer(); int inWidthStep = img.WidthStep; int height = img.Height; int width = img.Width; imageIn[height * inWidthStep + width * 1000] = 100; // make it go wrong } |
当我在这个语句周围放置一个try-catch时,仍然会得到一个异常。是否有方法捕获在不安全块中生成的异常?
编辑:如下面所述,除非通过将此属性添加到函数并添加"using system.runtime.exceptionservices"显式启用了对异常的检查,否则不再处理此类异常。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [HandleProcessCorruptedStateExceptions] public void makeItCrash(IplImage img) { try { unsafe { byte* imageIn = (byte*)img.ImageData.ToPointer(); int inWidthStep = img.WidthStep; int height = img.Height; int width = img.Width; imageIn[height * inWidthStep + width * 1000] = 100; // to make it crash } } catch(AccessViolationException e) { // log the problem and get out } } |
检查大小,如果参数使您在图像外写入,则返回一个