Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/86: Рейтинг темы: голосов - 86, средняя оценка - 4.92
Invisible
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 6
1

Необработанное исключение типа "System.AccessViolationException"

22.05.2013, 04:09. Просмотров 17198. Ответов 16
Метки нет (Все метки)

Здравствуйте уважаемые программисты. У меня произошла такая ситуация:
Писал прогу в VS 2010 на C#, дописал его, скомпилил, всё работало прекрасно. Примерно через неделю стало необходимо внести изменения в эту прогу. Как обычно запустил этот *.sln проект, нажал F5, чтобы вспомнить на чём я там остановился, но при запуске VS выдаёт следующее:

"Необработанное исключение типа "System.AccessViolationException" произошло в System.Drawing.dll
Дополнительные сведения: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."

Пробовал открывать этот же проект на другом компе в VS 2010 - всё работает на ура.
Помогите пожалуйста решить эту проблему.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 04:09
Ответы с готовыми решениями:

Необработанное исключение типа "System.IO.FileLoadException" в System.Windows.Forms.dll
Всем доброго времени суток! Возникла проблема при подключении...

Необработанное исключение типа "System.UnauthorizedAccessException" в System.Speech.dll
Когда начал компилировать такая вот ошибка вышла : "Необработанное исключение типа...

Необработанное исключение типа "System.ArgumentException" в System.Drawing.dll
Доброго времени суток. Возникла проблема с загрузкой изображения из базы данных. Вот собственно...

Необработанное исключение типа "System.IO.IOException" в System.dll
Здравствуйте. Недавно начал учиться программировать на C#. При создании следующей программы...

Необработанное исключение типа "System.ArgumentException" в System.dll
доброго времени суток!!!! проблема такая не могу настроить отправку на почту майл!!!!!! у меня...

16
Psilon
Master of Orion
Эксперт .NET
6049 / 4907 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
Завершенные тесты: 4
22.05.2013, 09:32 2
Invisible, где-то хренотень происходит, например, не закрываете файл после чтения итд, в общем, когда настройки окружения начинают влиять, значит в проге косяки, которые на одной машине друг-друга компенсируют, а на другой все может полететь.
0
Invisible
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 6
22.05.2013, 16:22  [ТС] 3
Psilon, в моей проге я не работаю с файлами. В ней используются методы класса Graphics. Вот как раз на методы класса Graphics VS и ругается при этой ошибке. И если убрать все эти методы из проги, то она успешно запускается. Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
 
namespace GraphPath
{
    class Model
    {
        private int widthRect =17;
        private int widthsignal=20;
        private int widthstep;
        private int x = 30;
        private int otst;
        private Pen pBlack = new Pen(Color.Black, 3);
        private Pen pGray = new Pen(Color.Gray, 3);
        private Pen pSignal = new Pen(Color.Yellow, 3);
        private Pen pLastic = new Pen(Color.Black, 3);
        private const int PAUSE = 1;
        Graphics g;
        public Model(System.Windows.Forms.PaintEventArgs e)
        {
            g = e.Graphics;
        }
 
       /* private void normPause(int msek)
        {
            int Counter = 0;
            while (true)
            {
 
                Thread.Sleep(1);
                Application.DoEvents();
                if (Counter++ > msek) break;
            }
        }*/
 
 
 
        public void drawSkelet(int countOU)
        {
            widthstep = widthRect + 5;
            //g.DrawLine(pGray, x-50, 80, x, 80);
            //g.DrawLine(pBlack, x-50, 55, x, 55);
 
           /* g.DrawLine(pGray, x, 85, countOU * widthstep + x, 85);
            g.DrawLine(pBlack, x, 60, countOU * widthstep + 1 * widthRect / 2 + x, 60);
            g.DrawRectangle(pBlack, x-27 , 50, 25, 50);*/
 
            //===================================================
            Font drawFont = new Font("Arial", 16);
            Font strLine = new Font("Arial", 10);
            Font strOU = new Font("Arial", 8);
            SolidBrush drawBrush = new SolidBrush(Color.Black);
            StringFormat drawFormat = new StringFormat();
            drawFormat.FormatFlags = StringFormatFlags.DisplayFormatControl;
 
            g.DrawString("К", drawFont, drawBrush, x-25, 60,drawFormat);
            g.DrawString("A", strLine, drawBrush, x+2, 45, drawFormat);
            g.DrawString("B", strLine, drawBrush, x+2, 85, drawFormat);
            //===================================================
 
 
 
 
            for (int i = 0, xx = x; i < countOU; i++, xx += widthstep)
            {
                g.DrawLine(pBlack, xx + 1 * widthRect / 2 + widthstep, 60, xx + 1 * widthRect / 2 + widthstep, 140);
                g.DrawLine(pGray, xx + widthstep, 85, xx + widthstep, 140);
                g.DrawRectangle(pBlack, xx + widthstep - 1*widthRect / 4, 140, widthRect, widthRect / 2);
                g.DrawLine(pBlack, xx + widthstep + 1 * widthRect / 4+1, 140, xx + widthstep + 1 * widthRect / 4+1, 140 + widthRect / 2);
               // g.DrawString((i + 1).ToString(), strOU, drawBrush, xx + widthstep-2, 150, drawFormat);
            }
            
        }
0
Psilon
Master of Orion
Эксперт .NET
6049 / 4907 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
Завершенные тесты: 4
22.05.2013, 17:31 4
Закиньте на форму picturebox и рисуйте в нем...
0
22.05.2013, 17:31
Invisible
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 6
22.05.2013, 18:31  [ТС] 5
Psilon, хотелось бы разобраться в причине ошибки, а не просто уйти от неё, тем более, если делать через PictureBox, то (наверное) придётся многое переписать.
Заметил следуюющую закономерность: если перекрыть panel1, на которой я рисую, каким-нибудь другим элементом, то прога выполняется без этой ошибки, только, конечно, не видно, что она там рисует...
Вот код, где я использую мой класс:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace GraphPath
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            const int A = 1;
            const int B = 2;
            Model my = new Model(e);
            my.drawSkelet(31);
 
            my.setState(1, A, 0);
            my.setCross(4, B);
 
            my.setState(5, B, 3);
            my.setCross(2, A);
 
            for (int i = 1; i <= 2; i++)
            {
                for (int j = 1; j <= 6; j++)
                {
                    my.drawOutputSignal(i, j);
                    my.drawInputSignal(i, j);
                }
            }
            my.endAll(); 
        }
    }
}
0
Invisible
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 6
23.05.2013, 16:55  [ТС] 6
В общем, не долго думая переустановил винду
0
Psilon
Master of Orion
Эксперт .NET
6049 / 4907 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
Завершенные тесты: 4
23.05.2013, 17:45 7
Invisible,
0
tezaurismosis
Администратор
Эксперт .NET
8729 / 4014 / 734
Регистрация: 17.04.2012
Сообщений: 8,801
Записей в блоге: 14
23.05.2013, 18:49 8
Цитата Сообщение от Invisible Посмотреть сообщение
В общем, не долго думая переустановил винду
Решил проблему
В следующий раз пробуйте менее кардинальные методы - переустановите .NET Framework, и это крайний случай, в первую очередь надо искать ошибки в программе - пробовали бы запустить её от другого пользователя, из другого места и т.д. Была у меня как-то подобная проблема - из-за сбоев с электричеством данные на диске повредились, как раз в тех участках, где лежали библиотеки .NET Framework, но тогда вообще ничего не компилилось, всё вылетало и глючило. Переустановка .NET Framework помогла - но опять же - как крайний случай.
0
Psilon
Master of Orion
Эксперт .NET
6049 / 4907 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
Завершенные тесты: 4
23.05.2013, 19:57 9
Напомнило
Кликните здесь для просмотра всего текста
Когда я учился на втором курсе одного белорусского университета, преподаватель физики предложила всем желающим принять участие в студенческой научно-практической конференции. Для этого требовалось написать программу, моделирующую какой-нибудь физический процесс. Поскольку от избытка любви к предмету я не страдал, а участие означало автомат на экзамене, моё решение было очевидным.

Моделировать пришлось связанные колебания маятников. Первый вариант программы я наскоро набросал на Delphi — для университетской конференции этого хватило. А затем была подготовка к такому же мероприятию, но уже между университетами. Поскольку времени хватало, я взялся переписать программу на FASM, заодно сохранив совместимость программы с Windows 95/98. Через несколько месяцев получилась вполне приличная 3D-модель с управлением параметрами системы, скоростью и направлением течения времени, возможностью подключать модели других физических процессов и прочими вкусняшками.

Проверка программы на моём собственном ноутбуке и на ноутбуках друзей-знакомых прошла на ура. А вот на домашнем компьютере (Win98) дальше выбора модели программа работать не захотела. Разумеется, всё оставшееся время было посвящено отладке. Правда, сам по себе проект уже начал надоедать, да и желания выходить с ним за пределы университета не было, поэтому в конце концов, так и не найдя ошибки, я понадеялся на русский авось и отдал программу как есть. Мне повезло: у организаторов программа не запустилась, но автомат за последний семестр физики уже был в кармане.

А полгода спустя ранним утром я, как обычно, шёл на первую пару. Мысли огромным роем носились в голове, сменяя одна другую. И вдруг я понял, в чём заключалась моя ошибка. Дождаться вечера, чтобы проверить догадку, было нелегко.

Поскольку в основном программа работала с вещественными числами, регистров общего назначения хватало с запасом. Чтобы подсократить размер экзешника, в самом начале программы я обнулял регистр EBX и использовал его везде, где это возможно, вместо константы 0. Всё тот же STDCALL этого не запрещает: вызываемые функции значение этого регистра сохраняют, так что оказалось действительно удобно. Есть только одна проблема: внутри себя функции WinAPI этот регистр активно используют, а соглашение вызова не обязывает их восстанавливать его значение перед вызовом callback-функций.

Моя ошибка оказалась в том, что в оконной процедуре (а с точки зрения User32.dll она как раз и есть callback) я забыл прописать явное обнуление EBX. На тех компьютерах, где программа работала корректно, мне просто везло: значение регистра оставалось нулевым. На остальных же системах там оказывалось ненулевое значение, которое успешно использовалось вместо всех нулей во многих процедурах программы. Одна строчка кода, два байта в экзешнике — полгода спустя они обрели своё место в коде, но было уже поздно.

Обнуляйте переменные и регистры — и будет вам счастье!
1
tezaurismosis
Администратор
Эксперт .NET
8729 / 4014 / 734
Регистрация: 17.04.2012
Сообщений: 8,801
Записей в блоге: 14
23.05.2013, 20:07 10
Psilon, поучительно.
0
Invisible
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 6
24.05.2013, 02:45  [ТС] 11
Цитата Сообщение от tezaurismosis Посмотреть сообщение
переустановите .NET Framework
tezaurismosis, я переустанавливал студию полностью, а вместе с ней и .NET Framework.

Цитата Сообщение от tezaurismosis Посмотреть сообщение
пробовали бы запустить её от другого пользователя, из другого места и т.д.
Я же писал, что пробовал запускать тот же проект на другом компе и всё работало на нём.
Если бы я не перепробывал все известные мне способы решения этой проблемы, то на форум не обращался бы.
0
Rius
Эксперт .NET
6174 / 4005 / 962
Регистрация: 25.05.2015
Сообщений: 12,126
Записей в блоге: 12
Завершенные тесты: 4
27.01.2016, 22:11 12
Столкнулся с проблемой, выдающей похожую ошибку:
System.AccessViolationException was unhandled Message: An unhandled exception of type 'System.AccessViolationException' occurred in System.Windows.Forms.dll
Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Google и тостер подсказали, что возникает она в отладке, после смены версии фреймворка, при работе под Windows x64. Даже у самой свежей и пустой программы на WinForms. Т.е. дело не в коде, добавленном программистом в проект.
Подавляется сменой целевого процессора на x86. Но это не решение.

Что сделал:

У меня VS 2015 Express для Desktop, Windows 10 x64.

1. Создал проект C# WinForms на .Net 4.5.
2. Сменил версию на .Net 4.0.
Получил ошибку.
3. Сменил версию обратно на 4.5. Ошибка осталась.
Получил дифф 1 и 3 этапов.

4. Удаляя значимые изменения с конца, наткнулся на
XML
1
<Prefer32Bit>false</Prefer32Bit>
Удалил это, и ошибка исчезла.

Проверьте кто-нибудь и подтвердите/опровергните.
0
Invisible
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 6
28.01.2016, 00:02  [ТС] 13
Rius, много времени прошло с того времени, когда столкнулся с этой проблемой, на компе сменилось несколько ОС. На C# не пишу больше, что такое Visual studio забыл даже, поэтому проверить не смогу.
0
Rius
Эксперт .NET
6174 / 4005 / 962
Регистрация: 25.05.2015
Сообщений: 12,126
Записей в блоге: 12
Завершенные тесты: 4
28.01.2016, 16:48 14
Неважно. Сам уже не могу воспроизвести.
Какой-то плавающий глюк...
0
tezaurismosis
Администратор
Эксперт .NET
8729 / 4014 / 734
Регистрация: 17.04.2012
Сообщений: 8,801
Записей в блоге: 14
28.01.2016, 18:49 15
Цитата Сообщение от Rius Посмотреть сообщение
Какой-то плавающий глюк...
Давно приметил, что AccessViolationException периодически возникает в самых неожиданных местах - при нескольких подряд вызовах OpenFileDialog, при динамическом добавлении пустого TabControl на форму и т.д.
Причин этому нигде так и не нашёл. Система всегда была 32-битная.
Вполне возможно, что проблема даже не в .NET'е, а глубже.
0
Rius
Эксперт .NET
6174 / 4005 / 962
Регистрация: 25.05.2015
Сообщений: 12,126
Записей в блоге: 12
Завершенные тесты: 4
09.02.2016, 17:41 16
Ещё пара возможностей для тех, кто встретит эту проблему:
  • Подобный внешне баг исправлен в .Net 4.5.2
    Visual Studio debugger throws AccessViolationException; Status : Closed
  • Можно попробовать добавить каталог с проектами (исполняемыми файлами) в исключения, в модуле HIPS антивируса (Comodo Internet Security, в частности). Потом перезапустить студию.
0
Muhammadjon
9 / 9 / 5
Регистрация: 07.11.2014
Сообщений: 112
Завершенные тесты: 2
08.02.2017, 11:38 17
Знаю что это не решение но такая ошибка у меня тоже начал выскочит. Это произошло после включения настройки IntelliTrace "События IntelliTrace и данные вызовов". Поставил обратно на "Только события IntelliTrace" и все заработало. Это просто "глушает" ошибку но можно работать.
1
08.02.2017, 11:38
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2017, 11:38

Необработанное исключение типа "System.FormatException" в mscorlib.dll
Здравствуйте! Не мог бы кто-нибудь помочь разобраться с ошибкой в программе? Не понимаю, что не...

Необработанное исключение типа "System.IO.IOException" в mscorlib.dll
Здравствуйте, иногда вылетает данная ошибка: Необработанное исключение типа...

Необработанное исключение типа "System.IO.IOException" в mscorlib.dll
Добрый день, тут в общем код вот: using System; using System.Collections.Generic; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.