@karina_eax

Появляется ошибка AccessViolationException: «Попытка чтения или записи в защищенную память». В чем может быть проблема?

В чем суть: необходимо было сделать выпадающий список из пользователей (combobox). После того как из списка выбирается какой-то пользователь, он добавляется в определенный файл, далее поле combobox'a снова свободно для ввода.
Реализация: В поле combobox'a начинают вводить ФИО, появляется выпадающий список с пользователями, чьи ФИО совпадают с введенным. Поиск совпадений реализован через запрос к апи сервера(используется JIRA), далее полученный список обрабатывается и сохраняется в массив, затем этот список выводится в combobox.

Проблема: порой код стабильно работает, но бывает, что через каждые 4-5 запросов появляется ошибка AccessViolationException "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."
Хотелось бы устранить данную проблему. Раньше ошибка появлялась чаще, я думала, что сервер блокирует частые обращения, поэтому запрос стала отправлять через каждые 4 символа. После этого проблема была забыта, пока программу не стали использовать в нормальном рабочем режиме.
public void dropDownList(ComboBox comboBox)
        {
            comboBox.Text = comboBox.Text;
            string text = comboBox.Text;

            string url = "https://serverAddress/api/2/user/picker?maxResults=7&query=" + text;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.CookieContainer = new CookieContainer();
            request.Method = "GET";
            request.ContentType = "application/json; charset=utf-8";
            request.CookieContainer.Add(Session.cookies);
            try
            {
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    Stream stream = response.GetResponseStream();
                    JsonSerializer jsonSerializer = new JsonSerializer();

                    using (StreamReader reader = new StreamReader(stream))
                    {
                        using (JsonTextReader jsonTextReader = new JsonTextReader(reader))
                        {
                            var obj = jsonSerializer.Deserialize(jsonTextReader);
                            string jsonString = @JsonConvert.SerializeObject(obj);

                            JObject jObject = JObject.Parse(jsonString);
                            JArray array = (JArray)jObject["users"];
                            comboBox.Items.Clear();
                            comboBox.SelectionStart = text.Length;
                            int count = array.Count;
                            userArray = new string[count];
                            string temp = "";

                            for (int i = 0; i < count; i++)
                            {
                                temp = string.Format("{0}", array[i]["html"]);
                                temp = temp.Replace("strong>", "").Replace("<", "").Replace("/", "");
                                userArray[i] = temp;
                                temp = "";
                            }

                            comboBox.Items.AddRange(userArray);
                            Array.Clear(userArray, 0, count);
                        }
                    }


                }
            }
            catch 
            {
                MessageBox.Show("Что-то пошло не так");
            }
        }
  • Вопрос задан
  • 677 просмотров
Пригласить эксперта
Ответы на вопрос 2
@John_Nash
coder
Такая ошибка может возникать только в неуправляемом коде.

ЗЫ: какая версия фреймворка? В 4м SEH exceptions по умолчанию не ловятся.
Ответ написан
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
1. В "AssemblyInfo.cs" нужно добавить:
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]


2. Вместо:
catch
{
    MessageBox.Show("Что-то пошло не так");
}


лучше сделать:
catch (Exception ex)
{
    Debug.WriteLine(ex);
    MessageBox.Show(ex.Message);
}


В результате вы получите подробное описание, а также указание на источник проблемы (см. окно вывода в отладчике).

P.S. Рискну предположить, что наговнокодили ребята из NewtonSoft.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы