Произошла непредвиденная ошибка необработанное исключение c ералаш

Такое сообщение: Необработанное исключение по адресу 0x00A8AF69 в ConsoleApplication5.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x005BF000.

Я выполнил трассировку, стрелка указала на восьмую строчку. Бесконечного цикла, как мне кажется, нет. Да и массив создан динамический. В чем ошибка?

  { 
  int i, j, k, pos = -1, N, M;
  int *d = new int;//Массив сдвигов
  N = s.length();
  M = find.length();
  clock_t t0 = GetTickCount(); // начальное время
  // Формирование таблицы сдвигов d
  for(i = 0; i <= N; i++)
  d[i] = M;
  for(i = 0; i < M - 1; i++)
  d[find[i]] = M - i - 1;
  // Поиск образца P в тексте S
  i = M;
  do{
  k = i;
  j = M;
    do
{
  j--;
  k--;
}
while(j >= 0 && s[k] == find[j]);
if(j == -1)
  pos = i - M;
else
  i += d[s[i - 1]];
 }
 while(i <= N && j >= 0);
 if(j > -1)
 cout << "Образец найден по смещению pos : " << pos-1 << endl; 
 else 
 cout << "Образец не найден" << endl;
 clock_t t1 = GetTickCount();// конечное время
 cout << "Время поиска : " << (double)(t1 - t0)/1000 << endl;// время поиска
 }
 system("pause");
 return 0;
 }

задан 23 мар 2015 в 19:21

Sergos's user avatar

SergosSergos

332 серебряных знака6 бронзовых знаков

2

@Sergos, ошибка очевидна — Вы пишете в память, которая на самом деле не выделена.

Смотрите:

 int *d = new int;//Массив сдвигов

Тут Вы выделили память под один int. Судя по коду

 for(i = 0; i < s.length(); i++)
   d[i] = M;   <---- ошибка????

нужен массив из s.length() чисел.

Вот и создавайте его правильно:

 int *d = new int[s.length()];//Массив сдвигов

Но в свете следующего фрагмента

 for(i = 0; i < M - 1; i++)
   d[find[i]] = M - i - 1;

учитывая

 M = find.length(); // а что за символы в строке find?

вообще-то остаются вопросы к алгоритму.

ответ дан 23 мар 2015 в 20:51

avp's user avatar

avpavp

45.6k6 золотых знаков45 серебряных знаков115 бронзовых знаков

7

Laix

1 / 1 / 0

Регистрация: 15.04.2013

Сообщений: 64

1

Необработанное исключение

15.04.2013, 20:59. Показов 11657. Ответов 7

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте!
Пишу программу для нумерации двумерного массива(т.е. собрать его заново в определенном порядке).
Сама сортировка происходит в функции sort.
В мейне выделяю динамически необходимую память под массив.
Всё вроде бы хорошо…

НО на этапе отладки выскакивает данная ошибка:

Первый этап обработки исключения в «0x00e54f82» в «numbering.exe»: 0xC0000005: Нарушение прав доступа при записи «0xfdfdfe05».
Необработанное исключение в «0x00e54f82» в «numbering.exe»: 0xC0000005: Нарушение прав доступа при записи «0xfdfdfe05».

После долгого поиска в интернете пришел к выводу, что проблема связана с памятью, но найти ошибку у себя я не смог.

О великие гуру, помогите чем можете =)

PS. программирую только на начальном уровне, поэтому особо серьезными словами не кидаться))

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
 
 
using namespace std;
 
void sort(int** set, int** mas, int m, int n);
void main()
{
    int height, width, i, j;
    setlocale (LC_ALL, "RUS" );
 
    //ввод объема
    cout << "Введите размеры набора чисел." << endl << "Высота: ";
    cin >> height;
    cout << "Ширина: ";
    cin >> width;
 
    
    
    //выделение памяти 
    int **set = new int *[height];
    for (i = 0; i < height; i++) 
         set[i] = new int [width];
     
    int **mas = new int *[height];
    for (i = 0; i < height; i++) 
         mas[i] = new int [width]; 
 
    
    //ввод массива
    cout << endl << "Введите исходный набор чисел:" << endl;
    for (i=0; i<height; i++)
        for(int j=0; j<width; j++)
            cin>>set[i][j];
 
    //вывод
    for (i=0; i<height; i++) {
        cout<<endl;
        for (j = 0; j < width; j++)
            {cout<<set[i][j] << ' ';}
    }
    cout << endl;
 
 
    //сортировка
    sort (set, mas, height, width);
 
 
    //вывод нового
    for (i=0; i<height; i++) {
        cout<<endl;
        for ( j = 0; j < width; j++) {
             cout<<mas[i][j] << ' ';}
        }
 
    
 
    //освобождение памяти
    for (int i = 0; i < height; i++) {
        delete []set[i];
    }
    delete []set;
 
    for (int i = 0; i < height; i++) {
        delete []mas[i];
    }
    delete []mas;
 
    system("pause");
}
 
//--------------------------------------------------------
void sort(int** set, int** mas, int m, int n)
{
    int i, j, q, u;
    i=0; j=0;
    q=0; u=0;
    mas[q][u]=set[i][j];
    q++; u++;
    while ( !(( i==0 && j==n ) || ( i==m && j==0)) ) {
                         j++;
        mas[q][u]=set[i][ j ];
        q++; u++;
        while ( !((j==0) || (i==m)) ) {
                          i++;  j--;
            mas[q][u]=set[ i ] [ j ];
            q++; u++;
        }
        if(( i==0 && j==n ) || ( i==m && j==0 )) //attention!
            break;
 
        if(i==m)  goto Point_1;
                      i++;
        mas[q][u]=set[ i ][j];
        q++; u++;
        while ( !((i==0) || (j==n)) ) {
                          i--; j++;
            mas[q][u]=set[ i ][ j ];
            q++; u++;
        }
    }
    // Вторая часть
 
    if ( i==m && j==0 )
        goto Point_1;
 
    while ( !(( j==n ) || (i==m) ) ) {
                      i++;
        mas[q][u]=set[i][j];
        q++; u++;
 
        if( (i==m) && (j==n) )
            break;
 
        while ( !(i==m) ) {
                          i++; j--;
            mas[q][u]=set[ i ][ j ];
            q++; u++;
        }
    }
 
Point_1:
 
    while ( !(( j==n ) || (i==m) ) ) {
                         j++;
        mas[q][u]=set[i][ j ];
        q++; u++;
 
        if( (i==m) && (j==n) )
            break;
 
        while ( !(j==n) ) {
                          i--; j++;
            mas[q][u]=set[ i ][ j ];
            q++; u++;
        }
    }
}



0



Aloir

224 / 224 / 38

Регистрация: 17.12.2010

Сообщений: 713

15.04.2013, 22:02

2

у вас выход за границы диапазона стека.

строка

C++
1
 mas[q][u]=set[i][j];

например входные данные:
w:3
h:1

вы будите присваивать в mas[3][3] какое то значение, когда mas[3][3] не существует



0



Laix

1 / 1 / 0

Регистрация: 15.04.2013

Сообщений: 64

15.04.2013, 22:34

 [ТС]

3

Цитата
Сообщение от Aloir
Посмотреть сообщение

у вас выход за границы диапазона стека.

строка

C++
1
 mas[q][u]=set[i][j];

например входные данные:
w:3
h:1

вы будите присваивать в mas[3][3] какое то значение, когда mas[3][3] не существует

это я предусмотрел на этапе алгоритма.
просто не буду использовать данную функцию для значений 1 и 2.
проблема даже в том, что в 3х3 тоже выдает ошибку, причем судя по значениям до тройки не доходит программа.



0



224 / 224 / 38

Регистрация: 17.12.2010

Сообщений: 713

15.04.2013, 22:58

4

Цитата
Сообщение от Laix
Посмотреть сообщение

это я предусмотрел на этапе алгоритма.
просто не буду использовать данную функцию для значений 1 и 2.
проблема даже в том, что в 3х3 тоже выдает ошибку, причем судя по значениям до тройки не доходит программа.

опять говорю, у вас выход за пределы массива.
пройдитесь внимательно дебагом!

для справки:
если длинна массива 4, то элементы там с индексам: 0, 1, 2, 3



1



1 / 1 / 0

Регистрация: 15.04.2013

Сообщений: 64

15.04.2013, 23:26

 [ТС]

5

Цитата
Сообщение от Aloir
Посмотреть сообщение

опять говорю, у вас выход за пределы массива.
пройдитесь внимательно дебагом!

для справки:
если длинна массива 4, то элементы там с индексам: 0, 1, 2, 3

черт точно)
а ведь я думал над этим))

вспомнил один вопрос касаемо этой проблемы, который долго меня мучил:
если мы создадим массив m[4], то элементы будут 0,1,2,3,4 соответственно.
но получается, что чаще всего 4ый элемент не используют. «тратит» ли он память? вообще может ли это негативно сказываться в больших программах?



0



224 / 224 / 38

Регистрация: 17.12.2010

Сообщений: 713

16.04.2013, 00:07

6

Цитата
Сообщение от Laix
Посмотреть сообщение

черт точно)
а ведь я думал над этим))

вспомнил один вопрос касаемо этой проблемы, который долго меня мучил:
если мы создадим массив m[4], то элементы будут 0,1,2,3,4 соответственно.
но получается, что чаще всего 4ый элемент не используют. «тратит» ли он память? вообще может ли это негативно сказываться в больших программах?

если мы создадим массив m[4] у нас будут элементы m[0],m[1],m[2],m[3], дальше — выход за пределы -> экспешен



1



1 / 1 / 0

Регистрация: 15.04.2013

Сообщений: 64

16.04.2013, 01:06

 [ТС]

7

Скажите, а можно ли узнать что это за переменные имеются ввиду?

Первый этап обработки исключения в «

0x00d85002

» в «numbering.exe»: 0xC0000005: Нарушение прав доступа при записи «

0xfdfdfe09

«.
Необработанное исключение в «

0x00d85002

» в «numbering.exe»: 0xC0000005: Нарушение прав доступа при записи «

0xfdfdfe09

«.

и есть ли где-нибудь описание, как правильно пользоваться отладчиком, чтобы видеть значения переменных?
а то начинаю делать пошагово и меня начинает кидать в разный библиотеки… так до своей программы и не дошел….



0



224 / 224 / 38

Регистрация: 17.12.2010

Сообщений: 713

16.04.2013, 01:32

8

Цитата
Сообщение от Laix
Посмотреть сообщение

Скажите, а можно ли узнать что это за переменные имеются ввиду?

и есть ли где-нибудь описание, как правильно пользоваться отладчиком, чтобы видеть значения переменных?
а то начинаю делать пошагово и меня начинает кидать в разный библиотеки… так до своей программы и не дошел….

ошибки, вас выкидывала на какую то ячейку памяти, что там не известно, может мусор, может какая-то другая информация, никто не знает)

а как отлаживать программу лучше погуглите:
Отладка программ в Visual Studio C++



0



Пишу лабораторную по программированию, возникает ошибка, связанная, как я понял, с утерей памяти (программа — написание функций для сложения, вычитания, умножения, деления и скалярного произведения для векторов в n-мерном пространстве. (Пишу в VS на C++(ООП))

Сам код

//h файл
#pragma once
#include <iostream>


class Vector {
private:
    double* coord;
    int size;
public:
    Vector(const Vector& vec);
    Vector(int n);
    Vector operator+(const Vector& vec);
    Vector operator-(const Vector& vec);
    Vector operator*(const Vector& other);
    Vector operator/(const Vector& other);
    double scalar(Vector x, Vector y);
    double length() const;
    void set(int pos, double value);
    friend std::ostream& operator<<(std::ostream& os, const Vector& vec);
};

//cpp файл

#include "Vector.h"
#include <iostream>

Vector::Vector(const Vector& vec) {
    
    coord = vec.coord;
    size = vec.size;
}


Vector::Vector(int n) {
    coord = new double[size];
    for (int i = 0; i < size; i++) {
        coord[i] = 0;
    }
    size = n;
}

void Vector::set(int pos, double value)
{
   coord[pos] = value; 
  
}

Vector Vector::operator+(const Vector& vec) {
    for (int i = 0; i < size; i++) {
        coord[i] = coord[i] + vec.coord[i];
    }
    return *this;
}
Vector Vector::operator-(const Vector& vec) {
    for (int i = 0; i < size; i++) {
        coord[i] = coord[i] - vec.coord[i];
    }
    return *this;
}
Vector Vector::operator*(const Vector& scalar) {
    for (int i = 0; i < size; i++) {
        coord[i] = coord[i] * scalar.coord[i];
    }
    return *this;
}
Vector Vector::operator/(const Vector& scalar) {
    for (int i = 0; i < size; i++) {
        coord[i] = coord[i] / scalar.coord[i];
    }
    return *this;
}

double Vector::length() const {
    double result = 0;
    for (int i = 0; i < size; i++) {
       result += pow(coord[i], 2);
   }
   return sqrt(result);
}
//
double Vector::scalar(Vector x, Vector y) {
    double res = 0;
    for (int i = 0; i < size; i++) {
        res += x.coord[i] * y.coord[i];
    }
    return res;
}

std::ostream& operator<<(std::ostream& os, const Vector& vec) {
    os << "(";
    for (int i = 0; i < vec.size; i++) {
        os << vec.coord[i];
        if (i != vec.size) {
            os << ", ";
        }
    }
    os << ")";
    return os;
}

//main.cpp файл

#include <iostream>
#include "Vector.h"

using namespace std;


int main() {



    Vector vector1(3);
    Vector vector2(3);

    vector1.set(0, 1);
    vector1.set(1, 2);
    vector1.set(2, 3);
    vector2.set(0, 4);
    vector2.set(1, 5);
    vector2.set(2, 6);

    cout << "Vector1" << vector1 << endl;
    cout << "Vector2" << vector2 << endl;
    Vector vector3 = vector1 + vector2;
    cout << "sum" << vector3 << std::endl;

    Vector vector4 = vector1 - vector2;
    cout << "difference" << vector4 << endl;

    Vector vector5 = vector1 * vector2;
    cout << "multyplation" << vector5 << endl;

    Vector vector6 = vector1 / vector2;
    cout << "division" << vector6 << endl;


    double length1 = vector1.length();
    double length2 = vector2.length();
    cout << "Length of vector1: " << length1 << endl;
    cout << "Length of vector2: " << length2 << endl;

    double scalar = vector1.scalar(vector1, vector2);

    
    cout << "Dot product of vectors = " << scalar << endl;
}

Ошибка выскакивает в функции:

std::ostream& operator<<(std::ostream& os, const Vector& vec) {
    os << "(";
    for (int i = 0; i < vec.size; i++) {
        os << vec.coord[i];
        if (i != vec.size) {  //компилятор ругается на эту строчку
            os << ", ";
        }
    }
    os << ")";
    return os;
}

Подскажите, пожалуйста, в чём ошибка, и связана ли она с конструкторами класса, или дело в самой функции?

На чтение 15 мин. Просмотров 706 Опубликовано 29.04.2021

Ошибка « Необработанное исключение win32 в * application_name * » обычно возникает, когда пользователь пытается запустить приложение, созданное в Visual Studio. Большинство зарегистрированных случаев этой ошибки связаны с Uplay, Internet Explorer и несколькими устаревшими играми, изначально созданными для более старых версий Windows.

Примечание : вот как исправить библиотеку времени выполнения, связанную с Visual C ++.

Содержание

  1. Что вызывает ошибку «Необработанное исключение в вашем приложении» в Windows?
  2. Решение 1. Установите все ожидающие обновления Windows
  3. Решение 2. Замените антивирус
  4. Решение 3. Удаление значения реестра Launcher (если применимо)
  5. Решение 4 : Сбросить Internet Explorer (если применимо)
  6. Решение 5. Отключите отладку скриптов и связанные ключи реестра (если применимо)
  7. Решение на 6: Установите последнюю версию NET Framework и отремонтируйте ее
  8. Решение 7. Выполните чистую загрузку
  9. Решение 8. Используйте SFC для сканирования утечек памяти
  10. Решение 9. Выполнение чистой установки

Что вызывает ошибку «Необработанное исключение в вашем приложении» в Windows?

Есть несколько Простые причины этой проблемы, и проблема может быть эффективно решена, если вы сможете распознать свой сценарий просто на основе определения правильной причины. Ознакомьтесь со списком ниже:

  • Виновником может быть ваш антивирус – известны некоторые антивирусные инструменты, такие как Panda Antivirus. которые вызвали эту проблему, поэтому обязательно замените их.
  • Могут быть запущены определенные программы или вредоносное ПО – если на вашем компьютере запущена установленная программа или вредоносное ПО, возможно, вы захотите от него избавиться. Убедитесь, что вы загружаетесь в режиме чистой загрузки, чтобы убедиться, что это правильная причина.
  • Установка Microsoft .NET Framework повреждена . Если его основные файлы повреждены, вы можно попробовать восстановить его установку, установить более новую версию или выполнить сканирование SFC.
  • Отладка скриптов включена через реестр – как оказалось, определенная Ключ реестра может способствовать возникновению этой проблемы. Чтобы решить эту проблему, вам необходимо отключить отладку скриптов с помощью ключей реестра.
  • Нарушение прав доступа в Msvcr92.dll – превышение исходного буфера или неправильный Последний байт также является потенциальной причиной этой проблемы. Чтобы устранить их, вам нужно будет устанавливать все ожидающие обновления Windows.
  • Удаление раздела реестра Ubisoft launcher – если вы видите эту ошибку при попытке запустить Uplay. exe, это связано с ошибкой в ​​Ubisoft Game Launcher. Эту проблему также можно решить через реестр, удалив значение, принадлежащее этому средству запуска.
  • Повреждение системного файла . Несогласованность системных файлов также может создать эту проблему. Легкие повреждения можно устранить с помощью простого сканирования DISM и SFC. В более серьезных обстоятельствах чистая установка или установка с восстановлением должны помочь вам в решении проблемы.

Решение 1. Установите все ожидающие обновления Windows

Одной из наиболее распространенных причин, которые в конечном итоге приводят к ошибке « Произошло необработанное исключение win32 », является приложение, созданное для платформы x64 с использованием MSVCR90.DLL, которое заканчивается вызов функции strncpy.

В этом случае нарушение прав доступа сработало в Msvcr92. DLL , скорее всего, приведет к тому, что приложение перестанет отвечать в функции strncpy. Наиболее вероятными причинами этой проблемы являются чрезмерный исходный буфер или неправильный конечный байт.

К счастью, Microsoft уже знает об этой проблеме и выпустила исправление для этой проблемы, которое автоматически решит ее. Чтобы воспользоваться им, все, что вам нужно сделать, это обновить версию вашей ОС до последней доступной версии.

Примечание. Это исправление было помещено в новую версию Visual Studio 2008, который Windows обновляет автоматически, поэтому приведенные ниже шаги универсальны и должны работать независимо от версии вашей ОС.

Вот краткое руководство по обновлению сборки Windows до последней версии для установки исправление для Visual Studio 2008 и устранение проблемы:

  1. Нажмите клавишу Windows + R , чтобы открыть Выполнить диалоговое окно. Затем введите ‘ms-settings: windowsupdate’ и нажмите Enter , чтобы открыть вкладку обновления Windows в Настройках . app.

    Примечание. Если вы столкнулись с этой проблемой в Windows 7 или Windows 8.1. вместо этого используйте команду ‘wuapp’ .

  2. После того, как вам удастся попасть на экран Центра обновления Windows, начните с нажатия Проверьте обновления . Затем начните следовать инструкциям на экране, чтобы завершить установку всех Windows Update , которые в настоящее время ожидают установки.

    Примечание. Помните, что очень важно устанавливать все обновления, а не только критические. Поскольку исправление включено в ревизию Visual Studio, вы можете найти соответствующее обновление в разделе «Необязательно», поэтому обязательно установите их все.

  3. В случае, если вы ‘ Вам будет предложено перезагрузить компьютер, прежде чем вы получите возможность установить все доступные обновления, сделайте это. Но не забудьте вернуться к этому же экрану после завершения следующего запуска, чтобы завершить установку остальных обновлений.
  4. После установки каждого ожидающего обновления перезагрузите компьютер в последний раз. а затем повторите действие, которое ранее вызывало сообщение об ошибке, чтобы узнать, устранена ли проблема.

Если вы все еще сталкиваетесь с ошибкой « Необработанный файл win32 исключение произошло ‘, перейдите к следующему способу ниже.

Решение 2. Замените антивирус

Бесплатные антивирусные инструменты могут быть весьма полезными, и они могут выполнять свою работу по защите вашего компьютера, но иногда они просто не ладят с другими вещами на вашем компьютере. Подумайте о замене антивируса, если он вызывает эту проблему, когда он включен!

  1. Щелкните меню “Пуск” и откройте Панель управления , выполнив поиск. Кроме того, вы можете щелкнуть значок шестеренки, чтобы открыть настройки, если вы используете Windows 10.
  2. В панели управления выберите Просмотреть как – Категория на в правом верхнем углу и нажмите Удалить программу в разделе «Программы».

  1. Если вы используете приложение” Настройки “, при нажатии на Apps немедленно откроется список всех программ, установленных на вашем компьютере.
  2. Найдите свой антивирусный инструмент в Панели управления или Настройках и нажмите Удалить .
  3. Должен открыться его мастер удаления, следуйте инструкциям по его удалению.

  1. Нажмите “Готово”, когда программа удаления завершит процесс, и перезапустите компьютер, чтобы увидеть, будут ли по-прежнему появляться ошибки. Убедитесь, что вы выбрали лучший вариант антивируса .

Решение 3. Удаление значения реестра Launcher (если применимо)

Если вы столкнулись с ошибкой « Произошло необработанное исключение win32 » при попытке запустить Uplay.exe или другое приложение, принадлежащее Ubisoft, скорее всего, это связано с ошибкой в ​​их Ubisoft Game Launcher.

Оказывается, это широко распространенная проблема в Windows 10, особенно среди пользователей, у которых одновременно установлены Steam и Uplay.

Несколько затронутых пользователей, с которыми мы изо всех сил пытаемся решить эту проблему, сумели исправить ее, используя редактор реестра, чтобы найти строковое значение реестра, принадлежащее средству запуска, и удалить его. Это якобы устраняет конфликт, позволяя обоим приложениям правильно работать на одном компьютере.

Вот краткое руководство по удалению значения реестра, связанного с программой запуска Uplay:

  1. Нажмите клавишу Windows + R , чтобы открыть диалоговое окно Выполнить . В текстовом поле введите ‘regedit’ и нажмите Enter , чтобы открыть редактор реестра . При появлении запроса UAC (Контроль учетных записей) введите Да , чтобы предоставить права администратора.
  2. Как только вы попадете в редактор реестра , используйте левую часть окна, чтобы перейти к следующее расположение:
     Computer  HKEY_LOCAL_MACHINE  SOFTWARE  WOW6432Node  Ubisoft 

    Примечание. Вы можете либо перейти туда вручную, либо вставить местоположение прямо в панель навигации вверху и нажмите Enter , чтобы сразу попасть туда.

  3. После того, как вам удастся приземлиться в правильном месте, двигайтесь вниз в правой части экрана щелкните правой кнопкой мыши Launcher и выберите Удалить , чтобы избавиться от него.

    Примечание. Если вы можете удалить ключ, вот как стать владельцем ключей реестра.

    Примечание. После его удаления средство запуска будет вынуждено создать новое строковое значение средства запуска со свежими данными, что должно решить проблему.

  4. После того, как ключ будет был удален, закройте редактор реестра и перезагрузите компьютер.
  5. При следующем запуске компьютера повторите действие, которое ранее вызывало « Произошло необработанное исключение win32 » и посмотрите, решена ли проблема.

Если проблема не устранена, перейдите к следующему потенциальному исправлению ниже.

Решение 4 : Сбросить Internet Explorer (если применимо)

Другой потенциальный случай, который может создать эту проблему, – это серия поврежденных Internet Explorer (IE). Если вы столкнулись с ошибкой “ Произошло необработанное исключение win32 в файле iexplore.exe ‘. Скорее всего, оно появляется после сбоя s cript.

Чтобы решить эту проблему, вам следует сбросить настройки Internet Explorer через меню «Свойства обозревателя». Многие пользователи, столкнувшиеся с этой ошибкой, подтвердили, что эта операция прошла успешно.

Вот краткое руководство по сбросу Internet Explorer для устранения ошибки « Необработанный файл win32 произошло исключение. ‘ошибка:

  1. Убедитесь, что Internet Explorer, Edge или любой другой связанный экземпляр выключен и фоновый процесс не запущен.
  2. Нажмите клавишу Windows + R , чтобы открыть диалоговое окно Выполнить . В текстовом поле введите ‘inetcpl.cpl’ и нажмите Enter , чтобы открыть меню Свойства обозревателя .

    Примечание. Если вам предложит UAC (Пользователь Контроль учетных записей) , нажмите Да , чтобы предоставить права администратора.

  3. После того, как вам удастся войти в Интернет На экране “Свойства ” выберите вкладку Дополнительно в горизонтальном меню вверху. Затем перейдите к настройкам Reset Internet Explorer и нажмите кнопку Reset .
  4. Как только вы увидите экран подтверждения, убедитесь, что установлен флажок Удалить личные настройки . , затем нажмите кнопку Reset .
  5. Подождите, пока операция завершена, затем перезагрузите компьютер и посмотрите, будет ли проблема решена при следующем запуске компьютера.

В случае того же «Необработанное исключение win32 произошло в iexplore.exe ‘ ошибка все еще возникает, перейдите к следующему способу ниже.

Решение 5. Отключите отладку скриптов и связанные ключи реестра (если применимо)

Если вы столкнулись с проблемой с Internet Explorer на машине, на которой установлен VS, проблема также может возникнуть из-за того, что включена отладка сценариев и записи реестра содержат поврежденные данные.

Несколько затронутых пользователей, столкнувшихся с этой проблемой, подтвердили, что проблема была решена после того, как они открыли меню «Свойства обозревателя», чтобы отключить отладку сценария, а затем удалили связанные ключи с помощью редактора реестра.

Вот краткое руководство по устранению ошибки « Необработанное исключение win32 в ошибке iexplorer.exe ‘:

  1. Нажмите клавишу Windows + R , чтобы открыть диалоговое окно Выполнить . Затем в текстовом поле введите « inetcpl.cpl» и нажмите Enter , чтобы открыть меню «Свойства обозревателя». Если вас предложит Контроль учетных записей (UAC) , нажмите Да , чтобы предоставить права администратора.
  2. Как только вам удастся оказаться на экране Свойства Интернета , используйте меню вверху, чтобы выбрать Дополнительно .
  3. На экране Свойства Интернета прокрутите вниз меню Настройки и установите флажок, связанный с Отключить отладку скриптов (Internet Explorer) .
  4. После того, как изменение вступит в силу, нажмите Применить , чтобы сохранить изменения, затем закройте окно Свойства Интернета .
  5. Нажмите Клавиша Windows + R еще раз, чтобы открыть другое диалоговое окно. На этот раз введите «regedit» и нажмите Enter , чтобы открыть редактор реестра. Вам потребуется предоставить доступ администратора, поэтому нажмите Да , когда появится запрос в окне управления учетными записями пользователей.
  6. Внутри редактора реестра перейдите в следующее место с помощью меню слева:
     HKEY_LOCAL_MACHINE  SOFTWARE  Microsoft  Windows NT  CurrentVersion  AeDebug (32-битная машина) HKEY_LOCAL_MACHINE   SOFTWARE  Wow6432Node  Microsoft  Windows NT  CurrentVersion  AeDebug (64-разрядная машина) 

    Примечание. Местоположение файла, который нам нужно удалить, отличается в зависимости от версии Windows, которую вы используете. Если у вас 32-разрядная версия Windows, используйте первое расположение, иначе используйте второе.

  7. Как только вы окажетесь в правильном месте, перейдите в правую секцию, вправо -щелкните Отладчик и выберите Удалить в контекстном меню.
  8. После удаления этого ключа перейдите во второе место:
     HKEY_LOCAL_MACHINE  SOFTWARE  Microsoft  .NETFramework  (32 - Bit Machine) HKEY_LOCAL_MACHINE  SOFTWARE  Wow6432Node   Microsoft  .NETFramework (64-битная машина) 

    Примечание. Получите доступ к разделу реестра, связанному с вашей битовой версией Windows, которую вы используете.

  9. Когда вы окажетесь в правильном месте, перейдите в правый раздел и удалите значение DbgManagedDebugger , щелкнув его правой кнопкой мыши и выбрав Удалить из контекстного меню.
  10. После того, как вам удастся удалить значение, закройте редактор реестра и перезагрузите компьютер.
  11. После завершения следующего запуска проверьте, возникает ли та же проблема.

На случай, если ошибка «Произошло необработанное исключение win32» ошибка все еще возникает, перейдите к следующему методу ниже.

Решение на 6: Установите последнюю версию NET Framework и отремонтируйте ее

Установка NET Framework на ваш компьютер жизненно важна, и от ее установки зависит множество современных игр и программ. Перед ремонтом выполните следующие действия, чтобы установить последнюю версию на свой компьютер.

Перейдите по этой ссылке и нажмите красную кнопку загрузки, чтобы загрузить последнюю версию Microsoft .NET. Фреймворк. После завершения загрузки найдите загруженный файл и запустите его. Учтите, что вам потребуется постоянный доступ в Интернет. Следуйте инструкциям на экране, чтобы продолжить установку.

  1. После установки последней версии пора проверить ее целостность. На клавиатуре используйте комбинацию клавиш Windows + R , чтобы открыть диалоговое окно Выполнить .
  2. Введите control. exe и нажмите OK, чтобы открыть его.

  1. Щелкните параметр Удалить программу и щелкните Включить или выключить функции Windows . Обязательно найдите запись .NET Framework 4.x.x и убедитесь, что она включена. «X.x» обозначает последнюю версию, доступную для вашей операционной системы.
  2. Если флажок рядом с .NET Framework 4.x.x не установлен, включите его, установив флажок. Нажмите OK, чтобы закрыть окно Компонент Windows и перезагрузите компьютер.

  1. Если .Net Framework 4.xx уже включен, вы можете восстановить .Net Framework, сняв флажок и перезагрузив компьютер. После перезагрузки компьютера снова включите .Net Framework и снова перезагрузите компьютер..

Решение 7. Выполните чистую загрузку

Существуют различные другие программы и службы, которые могут повлиять на правильную загрузку. функциональность пакета Microsoft .NET Framework. В большинстве случаев причиной является установленный вами антивирус, и вы можете попробовать отключить его, чтобы проверить, сохраняется ли ошибка. Однако, чтобы убедиться, что ничто не может помешать установке, мы рекомендуем выполнить чистую загрузку, которая отключит запуск всех сторонних программ и служб. Таким образом, вы можете легко определить, какая программа вызывает эту ошибку!

  1. Используйте комбинацию клавиш Windows + R на клавиатуре. В диалоговом окне Выполнить введите MSCONFIG и нажмите ОК.
  2. Щелкните вкладку Загрузка и снимите флажок с параметра Безопасная загрузка ( если отмечено).

  1. На вкладке “Общие” в том же щелкните, чтобы выбрать параметр Выборочный запуск , а затем снимите флажок Загружать элементы автозагрузки , чтобы убедиться, что он не установлен.
  2. На вкладке Службы установите флажок Скрыть все службы Microsoft , а затем нажмите Отключить все

  1. На вкладке “Автозагрузка” нажмите Открыть диспетчер задач . В окне диспетчера задач на вкладке «Автозагрузка» щелкните правой кнопкой мыши каждый включенный элемент автозагрузки и выберите

  1. После этого вам нужно будет выполнить некоторые из самых утомительных процессов, а именно включение элементов автозагрузки один за другим. и перезагрузите компьютер. После этого нужно проверить, появляется ли проблема снова. Вам нужно будет повторить тот же процесс даже для Сервисов, которые вы отключили на шаге 4.
  2. Как только вы обнаружите проблемный элемент автозагрузки или сервис, вы можете предпринять действия, чтобы решить эту проблему. ВНИМАНИЕ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Если это программа, ее можно переустановить или восстановить . Если это служба, вы можете отключить ее и т. Д.

Решение 8. Используйте SFC для сканирования утечек памяти

Сообщалось, что повреждение Microsoft .NET Framework связано с неисправной системой файлы. Эти проблемы уходят корнями глубоко в системные файлы, и единственный способ попытаться решить их – запустить средство проверки системных файлов (SFC). Он просканирует ваши системные файлы на наличие ошибок и, возможно, отремонтирует или заменит их. Для этого выполните следующие действия!

  1. Найдите « Command Prompt », набрав его либо прямо в меню «Пуск», либо нажав нажав кнопку поиска рядом с ним. Щелкните правой кнопкой мыши первую запись, которая появится как результат поиска, и выберите пункт контекстного меню «Запуск от имени администратора»..
  2. Кроме того, вы также можете использовать комбинацию клавиш с логотипом Windows + R, чтобы открыть диалоговое окно Выполнить . Введите « cmd » в открывшемся диалоговом окне и используйте комбинацию клавиш Ctrl + Shift + Enter для командной строки администратора.

  1. Введите следующие команды в окне и не забудьте нажать Enter после ввода каждой один. Дождитесь сообщения «Операция успешно завершена» или чего-то подобного, чтобы узнать, что метод сработал.
 sfc/scannow 
  1. Попробуйте перезагрузить компьютер и проверьте, продолжает ли ошибка Необработанное исключение в вашем приложении появляться на вашем компьютере.

Решение 9. Выполнение чистой установки

Если ни один из представленных ниже методов не помог вам в решении проблемы, скорее всего, вы имеете дело с какой-то несоответствия Windows, которое не может быть разрешено традиционным способом.

Если этот сценарий применим, вы сможете решить проблему, сбросив все компоненты, связанные с вашей установкой Windows. Если вы хотите пойти по этому пути, у вас есть два пути вперед. Все сводится к процедуре, которой вы хотите следовать:

  • Ремонтная установка (восстановление на месте) – эта процедура является наилучшей. подход, когда вам нужно обновить каждый компонент ОС, но некоторые пользователи могут в конечном итоге посчитать его слишком утомительным на свой вкус. Имейте в виду, что вам понадобится совместимый установочный носитель, чтобы применить это исправление, но основным преимуществом является то, что все ваши личные данные (включая игры, приложения и личные носители) будут сохранены, даже если вы не создадите резервную копию своего компьютера. .
  • Чистая установка . Если вы ищете простейшее решение, это лучший вариант. Вам не понадобится установочный носитель для его принудительного применения (все это делается через графический интерфейс Windows). Но если вы заранее не сделаете резервную копию своих данных, будьте готовы к полной потере данных.

I am currently working on the BlackJack project, but there is an error showing «exception Unhandled: Unhandled exception thrown: read access violation. this was 0x4.». I am not quite sure which part I did wrong, and the program sometimes runs normally sometimes shows that exception. In draw_card function, it returns a value of a random number. For example: if we get 13, the value will be 10. It also returns the name of the card and the type of the card such as 13 corresponds to king.

int main()
{
    srand(time(0));
    unsigned bet;
    int player = 0 , dealer = 0;
    string card , type;

    cout << "You have $100. Enter bet: ";
    cin >> bet;
    
    cout << "Your cards are:" << endl; 
    player += draw_card(card, type, player);
    cout << "  "+card + " of " + type << endl;
    player += draw_card(card, type, player);
    cout << "  " + card + " of " + type << endl << endl << endl;
}

int draw_card(string& card, string& type, int drawer_points) {
    int randomNumber;  //between 1 and 13
    int suite;         //between 1 and 4 to determine the suite of the card.

    randomNumber = rand() % 13 + 1;
    suite = rand() % 4 + 1;
    
    card = getRank(randomNumber);
    type = getSuit(suite);

    if (randomNumber == 13 || randomNumber == 12 || randomNumber == 11) {
        return 10;
    }else if (randomNumber == 1) {
        int ace1 = 21 - (drawer_points + 1);
        int ace2 = 21 - (drawer_points + 11);

        return ace1 < ace2 ? 1 : 11;
    }
    else
    {
        return randomNumber;
    }
}


string getSuit(int suit) {
    
    switch (suit)
    {
    case 0:
        return "spades";
        break;
    case 1:
        return "clubs";
        break;
    case 2:
        return "diamonds";
        break;
    case 3:
        return "hearts";
        break;
    default:
        break;
    }
    
}

string getRank(int rank) {
    switch (rank)
    {
    case 13:
        return "King";
        break;
    case 12:
        return "Queen";
        break;
    case 11:
        return "Jack";
        break;
    case 1:
        return "Ace";
        break;
    case 2:
        return "Two";
        break;
    case 3:
        return "Three";
        break;
    case 4:
        return "Four";
        break;
    case 5:
        return "Five";
        break;
    case 6:
        return "Six";
        break;
    case 7:
        return "Seven";
        break;
    case 8:
        return "Eight";
        break;
    case 9:
        return "Nine";
        break;
    case 10:
        return "Ten";
        break;
    default:
        break;
    }

user438383's user avatar

user438383

5,5858 gold badges28 silver badges41 bronze badges

asked Jan 18, 2022 at 18:12

Danny Zhao's user avatar

5

You generate

suite = rand() % 4 + 1;

This is a random number between 1 and 4 inclusive.

You then call

getSuit(suite);

But getSuit only has switch branches for values between 0 and 3 inclusive:

switch (suit)
{
case 0:
    return "spades";
    break;
case 1:
    return "clubs";
    break;
case 2:
    return "diamonds";
    break;
case 3:
    return "hearts";
    break;
default:
    break;
}

Not returning a value from a function that is declared to return a value is undefined behaviour.

answered Jan 18, 2022 at 18:27

konsolas's user avatar

konsolaskonsolas

1,00111 silver badges24 bronze badges

A few functions like getSuit and getRank in your code don’t return a value if only the default case of their switch statement is executed.

You can return an empty string in the default cases:

default:
        return ""; // empty string

And in the call site, check to see if the returned value is empty using the empty function.

Another way is to use std::optional<T> like below:

std::optional<string> getSuit( const int suit )
{
    switch (suit)
    {
    case 0:
        return "spades";
    case 1:
        return "clubs";
    case 2:
        return "diamonds";
    case 3:
        return "hearts";
    default:
        return { }; // empty optional
    }
}

And in the call site:

std::optinal<std::string> type { getSuit(suite) };

if ( type ) // if optional has value
{
    // extract and use the value inside of optional
    type.value( );
}

Keep in mind that if the optional does not have a value, using value() will throw. You can use value_or() instead which does not throw.

answered Jan 18, 2022 at 18:28

digito_evo's user avatar

digito_evodigito_evo

3,1542 gold badges13 silver badges39 bronze badges

2

Если при попытке запустить приложение, разработанное с помощью Visual Studio, или при загрузке ПК с Windows 11 или Windows 10 и на рабочем столе вы получаете сообщение об ошибке с сообщением, что в вашем приложении произошло необработанное исключение, то это сообщение призван помочь вам с наиболее подходящими решениями для исправления ошибки.

В вашем приложении произошло необработанное исключение

Когда вы столкнетесь с этой проблемой, вы получите сообщение об ошибке в следующих строках;

Microsoft.NET Framework

В вашем приложении произошло необработанное исключение. Если вы нажмете «Продолжить», приложение проигнорирует эту ошибку и попытается продолжить. Если вы выберете «Выйти», приложение немедленно закроется.

Неверный класс.

Вы можете столкнуться с этой проблемой по одной или нескольким из следующих причин;

  • Ваш антивирус может быть виноватым.
  • Могут быть запущены некоторые программы или вредоносное ПО.
  • Установка Microsoft .NET Framework повреждена.
  • Отладка скриптов включена через реестр.
  • Нарушение прав доступа в Msvcr92.dll.
  • Удаление раздела реестра лаунчера Ubisoft.
  • Повреждение системного файла.

В вашем приложении произошло необработанное исключение

Если вы столкнулись с этой проблемой, вы можете попробовать наши рекомендуемые решения ниже в произвольном порядке и посмотреть, поможет ли это решить В вашем приложении произошло необработанное исключение проблема на вашем устройстве Windows 11/10.

  1. Включить .NET Framework
  2. Установите последнюю версию .NET Framework
  3. Запустите средство восстановления .NET Framework
  4. Выполните сканирование SFC и DISM
  5. Устранение неполадок в состоянии чистой загрузки
  6. Отключить / удалить стороннее программное обеспечение безопасности (если применимо)
  7. Изменить реестр — удалить ключ Ubisoft Launcher (если применимо)
  8. Сбросить настройки Интернета
  9. Отключить отладку скриптов (если применимо)

Давайте посмотрим на описание процесса, связанного с каждым из перечисленных решений.

Перед тем, как попробовать приведенные ниже решения, проверьте наличие обновлений и установите все доступные биты на свое устройство с Windows 11/10 и посмотрите, появляется ли ошибка снова при запуске программы или загрузке системы, в зависимости от обстоятельств. Также запустите полное антивирусное сканирование системы с помощью Защитника Windows или любого уважаемого стороннего антивирусного продукта, чтобы вылечить и удалить вирусы / вредоносные программы, которые могут быть причиной рассматриваемой проблемы.

1]Включить .NET Framework

Включить .NET Framework

Поскольку сообщение об ошибке указывает на .NET Framework, это решение требует, чтобы вы убедились, что .NET Framework включен на вашем компьютере с Windows 11/10, а затем проверьте, есть ли В вашем приложении произошло необработанное исключение проблема на вашем устройстве решена. В противном случае попробуйте следующее решение.

2]Установите последнюю версию .NET Framework.

Предполагая, что в вашей системе уже включен .NET Framework, но ошибка продолжает появляться, вы можете загрузить и установить последнюю версию .NET Framework с правами администратора на свое устройство Windows 11/10 — и если у вас возникнут проблемы с установкой .NET. Framework на вашем устройстве, см. Сообщение о том, как устранять проблемы с установкой .NET Framework.

3]Запустите средство восстановления .NET Framework.

Запустите средство восстановления .NET Framework

Это решение запуска .NET Framework Repair Tool следует в том случае, если включение и установка последней версии .NET Framework на вашем ПК с Windows 11/10 не смогла решить возникшую проблему.

4]Выполните сканирование SFC и DISM.

Если у вас есть ошибки в системных файлах, вы можете столкнуться с этой ошибкой. SFC / DISM — это служебная программа в Windows, которая позволяет пользователям сканировать системные файлы Windows на наличие повреждений и восстанавливать поврежденные файлы.

Это решение требует, чтобы вы запустили сканирование SFC, и если эта операция не устранила проблему, вы можете запустить сканирование DISM или попробовать следующее решение.

5]Устранение неполадок в состоянии чистой загрузки

Эта проблема может возникнуть, если какие-либо сторонние приложения или процессы мешают нормальной работе .NET Framework, установленной и запущенной на вашем ПК с Windows 11/10. В этом случае вы можете устранить неполадки в состоянии чистой загрузки и посмотреть, решена ли проблема. В противном случае попробуйте следующее решение.

6]Отключить / удалить стороннее программное обеспечение безопасности (если применимо)

Известно, что большинство сторонних программ безопасности вызывают именно эту проблему. В этом случае, чтобы решить эту проблему, вам придется удалить все сторонние антивирусные программы с вашего ПК с помощью специального инструмента для удаления AV, чтобы удалить все файлы, связанные с вашей антивирусной программой.

Если удаление антивируса устраняет эту ошибку, теперь вы можете снова установить тот же антивирус, или вы можете переключиться на альтернативное программное обеспечение или, еще лучше, придерживаться собственной антивирусной программы Windows 11/10 — Защитника Windows.

7]Изменить реестр — удалить ключ Ubisoft Launcher (если применимо)

Изменить реестр - удалить ключ Ubisoft Launcher

Вы можете столкнуться с этой проблемой при попытке запустить такие приложения, как Uplay, Internet Explorer, некоторые старые несовместимые игры, разработанные для более ранних версий Windows. И, как показывает расследование, данная проблема, по-видимому, является широко распространенной проблемой в Windows 11/10, особенно среди пользователей, у которых одновременно установлены Steam и Uplay. В этом случае, чтобы решить проблему, вам необходимо удалить запись реестра, связанную с программой запуска Uplay — это якобы устраняет конфликт, позволяя обоим приложениям правильно работать на одном компьютере.

Сделайте следующее:

Поскольку это операция реестра, рекомендуется создать резервную копию реестра или создать точку восстановления системы в качестве необходимых мер предосторожности. После этого вы можете действовать следующим образом:

Компьютер HKEY_LOCAL_MACHINE SOFTWARE WOW6432Node Ubisoft

  • В нужном месте на правой панели щелкните правой кнопкой мыши запись Launcher и выберите Удалить.

Если вы получаете сообщение об ошибке при удалении раздела реестра в вашей системе Windows 11/10, вы можете стать владельцем раздела реестра и повторить операцию удаления еще раз.

  • После удаления закройте редактор реестра.
  • Перезагрузите компьютер.

При загрузке проверьте, исправлена ​​ли ошибка. Если нет, попробуйте следующее решение.

8]Сбросить настройки обозревателя

Сбросить Internet Explorer

Откройте «Свойства обозревателя» и нажмите кнопку «Восстановить дополнительные настройки».

Затем, если вы используете Windows 10 на своем устройстве и столкнулись с этой проблемой, вы можете сбросить Internet Explorer до настроек по умолчанию и посмотреть, поможет ли это. Поскольку IE в Windows 11 не рекомендуется, это решение применимо только к пользователям ПК с Windows 10.

9]Отключить отладку сценария (если применимо)

Отключить отладку скриптов

И здесь это решение применимо только к пользователям ПК с Windows 10. поскольку вы можете столкнуться с проблемой с Internet Explorer на компьютере, на котором установлена ​​Visual Studio, и включена отладка сценариев, и записи реестра в конечном итоге содержат поврежденные данные. В этом случае, чтобы решить возникшую проблему, вам необходимо отключить отладку сценариев, а затем удалить связанные разделы реестра.

После того, как вы должны отключить отладку сценариев, следуя инструкциям в руководстве по исправлению ошибки длительного выполнения сценария в Internet Explorer 11, вы можете приступить к удалению связанных разделов реестра на вашем устройстве с Windows 10 — вот как:

  • Сделайте резервную копию реестра или создайте точку восстановления системы.
  • Откройте редактор реестра.
  • В зависимости от архитектуры вашей системы перейдите по указанному ниже пути к ключу реестра или перейдите к нему:

Для 32-битных пользователей

HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion AeDebug

Для 64-битных пользователей

HKEY_LOCAL_MACHINE SOFTWARE Wow6432Node Microsoft Windows NT CurrentVersion AeDebug

  • В нужном месте на правой панели щелкните правой кнопкой мыши значок Отладчик ключ и нажмите Удалить.

Изменить реестр - удалить ключ отладчика

  • Затем перейдите к пути к ключу реестра ниже:

Для 32-битных пользователей

HKEY_LOCAL_MACHINE SOFTWARE Microsoft .NETFramework

Для 64-битных пользователей

HKEY_LOCAL_MACHINE SOFTWARE Wow6432Node Microsoft .NETFramework

  • В нужном месте на правой панели щелкните правой кнопкой мыши значок DbgManagedDebugger ключ и нажмите Удалить.

Изменить реестр - удалить ключ DbgManagedDebugger

  • Закройте редактор реестра.
  • Перезагрузите компьютер.

Вот и все!

Связанное сообщение: Ошибка нарушения прав доступа к необработанному исключению

Как исправить необработанную ошибку сервера?

Если вы столкнулись с необработанной ошибкой сервера в MLB The Show 21 на своем игровом устройстве, вы можете попробовать следующие предложения, чтобы исправить ошибку:

  • Проверьте, проводится ли обслуживание сервера.
  • Перезагрузите игру.
  • Перезагрузите консоль или ПК.
  • Проверить сетевое соединение.

Что такое необработанное исключение сервера?

Для игроков, которые получают сообщение об ошибке Unhandled Server Exception на своем игровом устройстве, ошибка означает, что ваше соединение с серверами MLB The Show 21 было отключено, и, следовательно, вы не можете использовать какие-либо онлайн-функции в игре, например онлайн. мультиплеер или Diamond Dynasty.

..Прилегающее соединение было закрыто: при получении произошла непредвиденная ошибка

У меня есть следующий код:

private Uri currentUri;

    private void Form1_Load(object sender, EventArgs e)
    {
        currentUri = new Uri(@"http://www.stackru.com");
        HttpWebRequest myRequest = (HttpWebRequest) HttpWebRequest.Create("http://www.stackru.com");
        WebProxy myProxy = new WebProxy("120.198.230.8:81");
        myRequest.Proxy = myProxy;

        HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

        webBrowser1.DocumentStream = myResponse.GetResponseStream();

        webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating);
    }

    void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    {
        if (e.Url.AbsolutePath != "blank")
        {
            currentUri = new Uri(currentUri, e.Url.AbsolutePath);
            HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(currentUri);

            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

            webBrowser1.DocumentStream = myResponse.GetResponseStream();
            e.Cancel = true;
        }
    }

после компиляции:

ошибка: необработанное исключение типа ‘System.Net.WebException’ произошло в System.dll

Дополнительная информация: базовое соединение было закрыто: при получении произошла непредвиденная ошибка.

на линии HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

Помогите мне, пожалуйста

2014-02-12 13:03

3
ответа

Решение

Основное соединение было закрыто: при получении произошла непредвиденная ошибка.

Эта проблема возникает, когда сервер или другое сетевое устройство неожиданно закрывает существующее соединение по протоколу управления передачей (TCP). Эта проблема может возникнуть, если значение тайм-аута на сервере или на сетевом устройстве слишком мало. Чтобы устранить эту проблему, см. Разрешения A, D, E, F и O. Проблема также может возникнуть, если сервер неожиданно сбрасывает соединение, например, если необработанное исключение приводит к сбою процесса сервера. Проанализируйте журналы сервера, чтобы увидеть, может ли это быть проблемой.

разрешение

Чтобы решить эту проблему, убедитесь, что вы используете самую последнюю версию.NET Framework.

Добавьте метод в класс, чтобы переопределить GetWebRequest метод. Это изменение позволяет получить доступ к объекту HttpWebRequest. Если вы используете Microsoft Visual C#, новый метод должен быть похож на следующий.

class MyTestService:TestService.TestService
{
    protected override WebRequest GetWebRequest(Uri uri)
    {
        HttpWebRequest webRequest = (HttpWebRequest) base.GetWebRequest(uri);
        //Setting KeepAlive to false
        webRequest.KeepAlive = false;
        return webRequest;
    }
}

Отрывок из KB915599: Вы получаете одно или несколько сообщений об ошибках при попытке сделать HTTP-запрос в приложении, построенном на.NET Framework 1.1 с пакетом обновления 1 (SP1).

2014-02-12 13:09

Настройка HttpWebRequest.KeepAlive в false не работал для меня

Поскольку я получал доступ к странице HTTPS, мне пришлось установить протокол безопасности точки обслуживания на Tls12.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Обратите внимание, что есть другие SecurityProtocolTypes: SecurityProtocolType.Ssl3, SecurityProtocolType.Tls, SecurityProtocolType.Tls11

Так что, если Tls12 не работает для вас, попробуйте три оставшихся варианта.

Также обратите внимание, что вы можете установить несколько протоколов. Это предпочтительнее в большинстве случаев.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

2017-05-08 09:57

  • .NET 4.6 and above. You don’t need to do any additional work to support TLS 1.2, it’s supported by default.
  • .NET 4.5. TLS 1.2 is supported, but it’s not a default protocol. You need to opt-in to use it. The following code will make TLS 1.2 default, make sure to execute it before making a connection to secured resource:
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

  • .NET 4.0. TLS 1.2 is not supported, but if you have.NET 4.5 (or above) installed on the system then you still can opt in for TLS 1.2 even if your application framework doesn’t support it. The only problem is that SecurityProtocolType in.NET 4.0 doesn’t have an entry for TLS1.2, so we’d have to use a numerical representation of this enum value:
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

  • .NET 3.5 or below. TLS 1.2 is not supported. Upgrade your application to more recent version of the framework.

2019-08-20 13:35

Ни одно из решений не сработало для меня. В итоге я обнаружил следующую комбинацию:

  • Клиентская система: Windows XP Pro SP3
  • В клиентской системе установлен.NET Framework 2 SP1, 3, 3.5
  • Программное обеспечение для.NET 2 с использованием классических веб-сервисов (.asmx)
  • Сервер: IIS6
  • Веб-сайт «Безопасные коммуникации» настроен на:
    • Требуется безопасный канал
    • Принять клиентские сертификаты

введите описание изображения здесь

Видимо, именно этот последний вариант был причиной проблемы. Я обнаружил это, пытаясь открыть URL-адрес веб-службы непосредственно в Internet Explorer. Он просто зависал на неопределенный срок, пытаясь загрузить страницу. Отключение «Принимать сертификаты клиента» позволило странице загружаться нормально. Я не уверен, что это была проблема с этой конкретной системой (возможно, сбой сертификата клиента?), Так как я не использовал сертификаты клиента, эта опция работала для меня.

2016-02-15 17:29

Мой хостинг-сервер блокирует запрос URL-адреса и кода сайта, получающего ту же ошибку
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

Потратив много времени, примените следующий шаг для решения этой проблемы

  1. Добавлена ​​строка перед URL-адресом вызова

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

  2. все еще проблема не решена, я обновляю версию.NET до 4.7.2, но я думаю, что это необязательно

  3. Последнее изменение. Я проверил уровень безопасности своего хостинг-сервера, который вызывает установление связи TLS для этого используемого сайта «https://www.ssllabs.com/ssltest/index.html»,
    а также проверяю, чтобы запросить уровень безопасности URL, тогда я обнаружил, что разница запрашиваемый URL-адрес должен включать набор шифров слабого уровня, который вы можете увидеть на изображении ниже

Теперь вот мой хостинг-сервер, поддерживающий Cipher Suites.

здесь вызывается, если у вас есть контроль над запрашиваемым сервером URL-адреса, тогда вы можете синхронизировать оба набора шифрования сервера. но в моем случае это невозможно, поэтому я применил следующий сценарий в Windows PowerShell на моем хост-сервере для включения требуемых наборов шифров слабого уровня.

Enable-TlsCipherSuite -Name "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
Enable-TlsCipherSuite -Name "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
Enable-TlsCipherSuite -Name "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
Enable-TlsCipherSuite -Name "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
Enable-TlsCipherSuite -Name "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
Enable-TlsCipherSuite -Name "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"
Enable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_256_GCM_SHA384"
Enable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_128_GCM_SHA256"
Enable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_256_CBC_SHA256"
Enable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_128_CBC_SHA256"
Enable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_256_CBC_SHA"
Enable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_256_CBC_SHA"

после применения вышеупомянутого скрипта мой уровень Cipher Suite сервера хостинга выглядит как

Тогда моя проблема решилась.

Примечание. Понижение уровня безопасности сервера не рекомендуется.

2020-10-07 14:33

Чтобы расширить ответ Барто Бернсманна, я хотел бы добавить, что можно получить универсальную, ориентированную на будущее реализацию за счет небольшого размышления:

static void AllowAllSecurityPrototols()
{   int                  i, n;
    Array                types;
    SecurityProtocolType combined;

    types = Enum.GetValues( typeof( SecurityProtocolType ) ); 
    combined = ( SecurityProtocolType )types.GetValue( 0 );

    n = types.Length;
    for( i = 1; i < n; i += 1 )
    {   combined |= ( SecurityProtocolType )types.GetValue( i );  }

    ServicePointManager.SecurityProtocol = combined;
}

Я вызываю этот метод в статическом конструкторе класса, который обращается к Интернету.

2020-07-17 17:46

Перед выполнением запроса я поставил инструкцию, как показано ниже, и она устранила мою ошибку. Просто к вашему сведению, если это кому-то поможет.

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; ctx.ExecuteQuery();

2019-09-04 18:30

Я также работал над проектом по очистке веб-страниц, и обнаружилась такая же проблема, применен приведенный ниже код, и он работал хорошо. Если вы не знаете о версиях TLS, вы можете применить все нижеприведенные, иначе вы можете применить конкретные.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11;

2019-11-08 13:27

Другие вопросы по тегам
c#

Понравилась статья? Поделить с друзьями:
  • Пылесос самсунг беспроводной вертикальный ошибки
  • Произошла непредвиденная ошибка невозможно загрузить страницу инстаграм
  • Пылесос робот полярис ошибки
  • Пылесос панда ошибка е06
  • Пропуск тире это какая ошибка