Ошибка stack around the variable

void GameBoard::enterShips()
{
    char location[1];
    int ships = 0;
    int count = 1;

    while(ships < NUM_SHIPS)
    {
        cout << "Enter a location for Ship " << count << ": ";
        cin >> location;
        cout << endl;

        Grid[location[0]][location[1]] = SHIP;
        ships++;
        count++;
    }
}

Im writing a battleship game. I have the board layouts working and the computers randomly generated ships. Now I am working on this method to prompt the user to enter coordinates for the ships When I run the program, it allows me to enter 5 ships. When I enter the 6th ship, it gives me this error.

Stack around the variable location was corrupted.

Ive looked for answers online and have not found anything exclusive.

Any help would be appreciated.

SoapBox's user avatar

SoapBox

20.4k3 gold badges51 silver badges87 bronze badges

asked Feb 27, 2011 at 20:57

bluetickk's user avatar

1

location is an array of a single char.
There is no location[1].

answered Feb 27, 2011 at 21:00

SLaks's user avatar

SLaksSLaks

864k176 gold badges1902 silver badges1961 bronze badges

You are prompting the memory address of location array to your user. You should ask location indices separately:

void GameBoard::enterShips()
{
    int location[2];
    int ships = 0;
    int count = 1;

    while(ships < NUM_SHIPS)
    {
        cout << "Enter a location for Ship " << count << ": ";
        cin >> location[0];
        cin >> location[1];
        cout << endl;

        Grid[location[0]][location[1]] = SHIP;
        ships++;
        count++;
    }
}

Notice int location[2]; since an array of size 1 can only hold one element. I also changed the element type to int. Reading char’s from the console will result in ASCII values, which are probably not what you want.

answered Feb 27, 2011 at 21:02

Tugrul Ates's user avatar

Tugrul AtesTugrul Ates

9,4281 gold badge33 silver badges58 bronze badges

1

cin >> location;

location is an array of one char. This can’t succeed because when you read from a stream into a char array, a null terminator has to be added (which takes one character). You will inevitably overrun the bounds of the array.

You can use a std::string, which will help you avoid any buffer overrun issues:

std::string location;
if (!(std::cin >> location)) {
    // handle input error
}

Note also that you probably need to convert the string representations of the numbers into numeric values. You can easily do this by reading from the stream into two int objects instead:

int x_location, y_location;
if (!(std::cin >> x_location >> y_location)) { 
    // Handle input error
}

if (x_location >= X_DIMENSION || x_location < 0 ||
    y_location >= Y_DIMENSION || y_location < 0) {
    // Handle out-of-range error 
}

// use x_location and y_location

answered Feb 27, 2011 at 21:04

James McNellis's user avatar

James McNellisJames McNellis

347k75 gold badges910 silver badges977 bronze badges

You made the location variable only able to hold a single character. You access it expecting it to hold at least 2 characters. If you’re using cin and expecting to read exactly two characters, a better method would be:

char locationX, locationY;
// ...
std::cin >> locationX >> locationY;
// ...
Grid[locationX][locationY] = SHIP;

answered Feb 27, 2011 at 21:01

SoapBox's user avatar

SoapBoxSoapBox

20.4k3 gold badges51 silver badges87 bronze badges

Introduction

If you are a C++ developer, you may have come across the «C++ stack around the variable was corrupted» error. This error occurs when a buffer overflow happens and is caused by code that writes beyond the end of an array or buffer. In this guide, we will explore the causes of this error and provide a step-by-step solution to fix it.

There are several reasons why this error might occur, including:

  • Writing beyond the end of an array or buffer
  • Improper use of pointers
  • Incorrect use of functions like strcpy() or strncpy()
  • Using uninitialized variables

How to Fix the «C++ Stack Around the Variable Was Corrupted» Error

Follow these steps to fix the «C++ stack around the variable was corrupted» error:

Check the code for buffer overflows: Look for places in the code where you might be writing beyond the end of an array or buffer. This often happens when using functions like strcpy() or strncpy(). Make sure that the size of the buffer is large enough to hold the data being copied.

Use dynamic memory allocation: Instead of using fixed-size arrays or buffers, use dynamic memory allocation. This will allow you to allocate memory at runtime and avoid buffer overflows.

Check for uninitialized variables: Make sure that all variables are properly initialized before use. Uninitialized variables can cause unexpected behavior and lead to buffer overflows.

Use the right data types: Make sure that you are using the right data types for your variables. Using the wrong data type can cause unexpected behavior and lead to buffer overflows.

Use bounds-checking functions: Consider using bounds-checking functions like strncpy_s() instead of strncpy(). These functions will check the size of the buffer before copying data and prevent buffer overflows.

FAQ

Q1. What is a buffer overflow?

A buffer overflow occurs when more data is written to a buffer than it can hold, causing data to spill over into adjacent memory locations.

Q2. What is dynamic memory allocation?

Dynamic memory allocation is a process of allocating memory at runtime instead of compile time. This allows you to allocate memory as needed and avoid buffer overflows.

Q3. How can I avoid buffer overflows?

You can avoid buffer overflows by using dynamic memory allocation, checking for uninitialized variables, using the right data types, and using bounds-checking functions.

Q4. What is the difference between strncpy() and strncpy_s()?

strncpy() copies a specified number of characters from one string to another, while strncpy_s() checks the size of the buffer before copying data and prevents buffer overflows.

Q5. How can I debug a buffer overflow?

You can use a debugger to step through your code and identify the source of the buffer overflow. You can also use tools like Valgrind to detect memory errors.

Conclusion

The «C++ stack around the variable was corrupted» error can be frustrating to deal with, but by following the steps outlined in this guide, you can fix the error and prevent it from happening in the future. Remember to always check your code for buffer overflows, use dynamic memory allocation, and use bounds-checking functions to avoid these types of errors.

  • Microsoft documentation on buffer security
  • C++ reference for dynamic memory allocation
  • Tutorial on debugging buffer overflows

valeriy007

81 / 25 / 19

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

Сообщений: 420

1

10.07.2015, 17:51. Показов 15486. Ответов 24

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


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

Учусь создавать списки. Идея такова чтобы создать список в отдельном cpp, а пользователь имел доступ только к функциям добавления, удаления и т.д. Все было хорошо, но вот столкнулся с проблемой после завершения программы всегда пишет:
Run-Time Check Failure #2 — Stack around the variable ‘a’ was corrupted.

Кликните здесь для просмотра всего текста

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
struct Rab
{   
    char *name; 
};
 
struct List{
private:
    Rab elem;
    List *next;
    List *begin = NULL;
    List *end = NULL;
public:
 
    void add(char *x)
    {
        List *add = new List;
        add->elem.name = x;
        add->next = NULL;
        if (!begin)
            begin = add;
        else
            end->next = add;
        end = add;
    }
 
    void print()
    {
        while (begin)
        {
            std::cout << begin->elem.name << std::endl;
            begin = begin->next;
        }
    }
};

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    char a[] = "";
    std::cin >> a;
 
    List myList;
    myList.add(a);
    std::cout << "nnn";
    myList.print();
 
    system("pause");
    return 0;
}

Если не трудно гляньте, может еще ошибок понаделал.



0



IrineK

Заблокирован

10.07.2015, 18:23

2

Не выделяете памяти под строки: ни в main, ни в add



0



valeriy007

81 / 25 / 19

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

Сообщений: 420

10.07.2015, 18:31

 [ТС]

3

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

Не выделяете памяти под строки: ни в main, ни в add

C++
1
2
char *a = new char[];
    std::cin >> a;

Так будет правильно? В add думаю не надо, ведь в функцию передаю только адрес.



0



859 / 448 / 112

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

Сообщений: 1,491

10.07.2015, 18:44

4

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

char *a = new char[];

в квадратных скобках нужно указать под сколько букв нужно выделить память



0



81 / 25 / 19

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

Сообщений: 420

10.07.2015, 18:52

 [ТС]

5

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

в квадратных скобках нужно указать под сколько букв нужно выделить память

просто хотелось бы вводить без ограничений, то есть сколько ввел, столько и вывел…
Можно сказать я не знаю сколько пользователь введет в строку букв…



0



IrineK

Заблокирован

10.07.2015, 19:26

6

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

Можно сказать я не знаю сколько пользователь введет в строку букв…

Вот это

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

C++
1
char a[] = "";

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

Сделайте нормальный буфер. Скажем

C++
1
char a[BUFSIZ];

Вот это

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

std::cin >> a;

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

Добавлено через 9 минут

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

В add думаю не надо, ведь в функцию передаю только адрес

Адрес чего? И где оно лежит? И где лежать будет?



0



valeriy007

81 / 25 / 19

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

Сообщений: 420

10.07.2015, 22:17

 [ТС]

7

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

Пользователю развернуться негде.

А если так?

C++
1
2
char *a = new char[];
    std::cin >> a;

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

Адрес чего? И где оно лежит? И где лежать будет?

Адрес «а» по которому элемент добавляется в список.



0



IrineK

Заблокирован

10.07.2015, 23:04

8

В рамках данного кода

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
#include <iostream>
 
struct Rab
{
    char *name;
};
 
struct List
{
private:
    Rab elem;
    List *next;
    List *begin = NULL;
    List *end = NULL;
public:
 
    void add(char *x)
    {
        List *add = new List;
        add->elem.name = new char[strlen(x) + 1];
        strcpy(add->elem.name, x);
        add->next = NULL;
        if (!begin)
            begin = add;
        else
            end->next = add;
        end = add;
    }
 
    void print()
    {
        while (begin)
        {
            std::cout << begin->elem.name << std::endl;
            begin = begin->next;
        }
    }
};
 
 
int main()
{
    char a[BUFSIZ];
    List myList;
 
    while (std::fgets(a, BUFSIZ, stdin) && a[0] != 'n')
    {
        if (a[strlen(a) - 1] == 'n')
            a[strlen(a) - 1] = '';
        
        myList.add(a);
    }
    
    myList.print();
 
    getchar();
    return 0;
}

Чтобы закончить ввод, введите пустую строку.

Ну, и нужно написать очистку памяти.



0



valeriy007

81 / 25 / 19

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

Сообщений: 420

11.07.2015, 14:38

 [ТС]

9

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

C++
1
2
3
4
5
6
7
while (std::fgets(a, BUFSIZ, stdin) && a[0] != 'n') 
{ 
if (a[strlen(a) - 1] == 'n') 
a[strlen(a) - 1] = '';
 
 myList.add(a); 
}

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

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

Ну, и нужно написать очистку памяти.

Очистку памяти от всего списка?

Объясните немного про BUFSIZ… Вместо него можно просто написать 512?. В нете почитал, он используется в основном при работе с файлами…

Добавлено через 1 час 16 минут

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

C++
1
2
add->elem.name = new char[strlen(x) + 1];
strcpy(add->elem.name, x);

Тут сложилась такая ситуация:
Ошибка 2 error C4996: ‘strcpy’: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:usersuserdocumentsvisual studio 2013projectstrenlistlist.hpp
Воспользовался тем что мне предложил студио, функция принимает 3 параметра, куда, сколько выделить байт(как я понял) и откуда. Я правильно воспользовался ею?)

C++
1
2
add->elem.name = new char [strlen(x) + 1];
strcpy_s(add->elem.name, strlen(x) + 1, x);



0



IrineK

Заблокирован

11.07.2015, 15:50

10

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

Я правильно воспользовался ею?)

Вы еще и в студии?
Тогда на самом верху, самой первой строкой

C++
1
#define _CRT_SECURE_NO_WARNINGS

И ничего вот этого с _s не пишите. Ну его.

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

в полноценной программе.

Там будет кириллица?



0



81 / 25 / 19

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

Сообщений: 420

11.07.2015, 15:58

 [ТС]

11

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

Там будет кириллица?

да

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

И ничего вот этого с _s не пишите. Ну его.

Понял, спасибо за совет)



0



Неэпический

17815 / 10586 / 2044

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

Сообщений: 26,631

Записей в блоге: 1

11.07.2015, 16:01

12

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

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

Ну если уж такая полноценная программа, то может взять проверенный список из стандартной библиотеки (std::list)?



0



IrineK

Заблокирован

11.07.2015, 16:01

13

Какой UI будете использовать для «полноценной программы»?



0



81 / 25 / 19

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

Сообщений: 420

11.07.2015, 16:05

 [ТС]

14

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

Ну если уж такая полноценная программа, то может взять проверенный список из стандартной библиотеки (std::list)?

Ну на счет полноценности наверно переборщил, просто учусь создавать список, и вот хочу потом реализовать на более-менее программке

Добавлено через 1 минуту

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

Какой UI будете использовать для «полноценной программы»?

Windows Form



0



IrineK

Заблокирован

11.07.2015, 16:10

15

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

Windows Form

С++/CLI?
Это же managed CLR среда.
Вы собираетесь использовать нативные unmanaged вставки?



0



81 / 25 / 19

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

Сообщений: 420

11.07.2015, 16:26

 [ТС]

16

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

С++/CLI?
Это же managed CLR среда.
Вы собираетесь использовать нативные unmanaged вставки?

Да… наверно… как только разберусь что это)

Добавлено через 6 минут
Просто с++ я ток изучаю, вот придумал себе задание сделать список и с его помощью программу «работники», вводить, выводить преобразовывать, сортировать и т.д. данные.



0



IrineK

Заблокирован

11.07.2015, 16:41

17

Тогда все это не туда.
Еси вы хотите использовать CLR, то естественным языком будет C#. В котором. кстати, и строки юникодовские и готовые списки симпатишные.

Если вы хотите писать на С++ в Visual Studio, то и UI нужно брать нативную: WinAPI, MFC.
Или прикручивать к студии Qt.

В моём случае для С++ использую VCL. То бишь, работаю не в MS Visual Studio, а в Embarcadero RAD Studio.
Там будут вам и формочки, и кнопочки, и возможность использования нативного кода.



1



81 / 25 / 19

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

Сообщений: 420

11.07.2015, 18:37

 [ТС]

18

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

Еси вы хотите использовать CLR, то естественным языком будет C#.

Это я уже узнал, но так же пишут что С++/CLI идет как расширение с++. Как вы посоветуете, пытаться на с++ там что-то делать или поменять UI?

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

Если вы хотите писать на С++ в Visual Studio, то и UI нужно брать нативную: WinAPI, MFC.

WinAPI изучал, точнее пытался изучить, но сразу отпугивает его сложность и отсутствие конструктора в Студии.

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

В моём случае для С++ использую VCL.

Ну начинал я изучать в Borland`е, а он vcl-ый.

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

Embarcadero RAD Studio

Подойдет для меня как для новичка? Среда самодостаточна?



0



81 / 25 / 19

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

Сообщений: 420

12.07.2015, 12:06

 [ТС]

20

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

Так что — всё для вас будет знакомым.
Среда всегда была интересной и самодостаточной.

Вот интересно стало, а профессиональные программисты на сегодняшний день пользуются vcl и Embarcadero студией
в своих шедеврах?
Просто для меня эта среда нова, никогда о ней не слышал, потому и терзают сомнения…

Добавлено через 10 минут
Можете посоветовать туториалы, уроки, можно на английском…



0



The «Stack around the variable ‘x’ was corrupted» error occurs when there is an issue with the stack memory allocation in a C++ program. The stack is used to store temporary data and function call information, and if it becomes corrupted, the program will likely crash or produce unexpected results. This error message typically indicates that there is a bug in the program that is causing the stack to be overwritten. This could be due to a number of reasons, including buffer overflows, stack overflows, uninitialized variables, and mismatched use of memory allocation functions like malloc() and free().

Method 1: Checking for Buffer Overflows

One of the ways to fix the error «Stack around the variable ‘x’ was corrupted» in C++ is to check for buffer overflows. A buffer overflow occurs when data is written beyond the end of a buffer. This can cause memory corruption and lead to the error message mentioned above.

Here’s an example code that demonstrates how to check for buffer overflows using the strncpy function:

#include 
#include 

int main() {
    char x[10];
    char y[] = "Hello World!";
    
    // Copy y to x using strncpy
    strncpy(x, y, sizeof(x));
    
    // Add null terminator to x
    x[sizeof(x) - 1] = '';
    
    std::cout << x << std::endl;
    
    return 0;
}

In this example, we have a character array x with a size of 10 and a string y with the value «Hello World!». We use the strncpy function to copy the contents of y to x. The sizeof(x) argument ensures that we only copy as many characters as x can hold.

After the copy, we add a null terminator to x to ensure that it is properly terminated. Finally, we print the value of x to the console.

Another way to check for buffer overflows is to use the snprintf function. Here’s an example code that demonstrates how to use snprintf:

#include 
#include 

int main() {
    char x[10];
    char y[] = "Hello World!";
    
    // Copy y to x using snprintf
    snprintf(x, sizeof(x), "%s", y);
    
    std::cout << x << std::endl;
    
    return 0;
}

In this example, we use the snprintf function to copy the contents of y to x. The sizeof(x) argument ensures that we only copy as many characters as x can hold.

Finally, we print the value of x to the console.

By using either strncpy or snprintf with proper buffer size, we can avoid buffer overflows and prevent the «Stack around the variable ‘x’ was corrupted» error message.

Method 2: Checking for Stack Overflows

One common cause of the error Stack around the variable 'x' was corrupted is a stack overflow. This can happen when a function allocates too much memory on the stack, causing it to overwrite other variables or return addresses. To prevent this, we can check for stack overflows at runtime using the following methods:

A guard variable is a special variable that we place at the end of our stack frame. We then periodically check this variable to make sure it has not been overwritten. If it has, we know we have a stack overflow. Here is an example:

void foo() {
    int x;
    int guard = 0xDEADBEEF; // guard variable
    // do some work here
    if (guard != 0xDEADBEEF) {
        // stack overflow detected!
    }
}

A canary value is a special value that we place just before the return address on the stack. We then check this value before returning from the function. If it has been changed, we know we have a stack overflow. Here is an example:

void foo() {
    int x;
    int canary = 0xDEADBEEF; // canary value
    // do some work here
    if (canary != 0xDEADBEEF) {
        // stack overflow detected!
    }
    return; // check canary value before returning
}

Some operating systems allow us to set a limit on the size of the stack. We can then check the current stack pointer against this limit to see if we are getting close to a stack overflow. Here is an example:

#include 
#include 
#include 

void foo() {
    int x;
    // do some work here
}

void handler(int sig) {
    // stack overflow detected!
    exit(1);
}

int main() {
    struct rlimit rl;
    getrlimit(RLIMIT_STACK, &rl);
    rl.rlim_cur = 1024 * 1024; // set stack limit to 1MB
    setrlimit(RLIMIT_STACK, &rl);
    signal(SIGSEGV, handler); // catch stack overflow signal
    foo();
    return 0;
}

In this example, we set the stack limit to 1MB and catch the SIGSEGV signal that is raised when the limit is exceeded.

These are just a few examples of how to check for stack overflows in C++. There are many other techniques and libraries available, depending on your specific needs and platform. It is important to always be aware of the stack usage in your code and take steps to prevent stack overflows.

Method 3: Initializing Variables

To fix the error «Stack around the variable ‘x’ was corrupted» in C++ using Initializing Variables, you can follow these steps:

  1. Declare the variable with a default value:
  1. Alternatively, you can also use the constructor to initialize the variable:
  1. If you are using an array, you can initialize it using the following syntax:
int arr[] = {1, 2, 3, 4, 5};
  1. You can also use the memset function to initialize the variable or array:
int x;
memset(&x, 0, sizeof(x));
  1. If you are using a string, you can initialize it using the following syntax:
std::string str = "Hello World";
  1. Another way to initialize a string is to use the constructor:
std::string str("Hello World");
  1. If you are using a vector, you can initialize it using the following syntax:
std::vector vec = {1, 2, 3, 4, 5};
  1. You can also use the resize function to initialize the vector:
std::vector vec;
vec.resize(5);
  1. Finally, it is always a good practice to initialize all variables before using them to avoid unexpected behavior.

By following these steps, you can avoid the error «Stack around the variable ‘x’ was corrupted» in C++ using Initializing Variables.

Method 4: Proper Use of Memory Allocation Functions

To fix the «Stack around the variable ‘x’ was corrupted» error in C++, you can use proper memory allocation functions. Here are the steps to follow:

  1. Declare a pointer variable of the appropriate data type.
  1. Allocate memory space for the variable using the new operator.
  1. Assign a value to the variable using the pointer.
  1. Use the variable as needed.
  1. Deallocate the memory using the delete operator.

Here’s an example code that demonstrates the proper use of memory allocation functions:

#include <iostream>
using namespace std;

int main()
{
    int *ptr;
    ptr = new int;
    *ptr = 10;
    cout << *ptr << endl;
    delete ptr;
    return 0;
}

Using proper memory allocation functions can prevent errors such as «Stack around the variable ‘x’ was corrupted». It’s important to always deallocate memory when it’s no longer needed to avoid memory leaks.

#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
    int x = 0;
    int myArr[50];
    for (int i = 0; i < 100; i++) {
        myArr[i] = x++;
        if (myArr[i]%2 != 0){
            cout << myArr[i] << endl;
        }
        
    }
    return 0;
}

Задача программы заполнить массив из 50-ти элементов нечётными числами от 1 до 99.
Программа работает, но она не завершается, выводит сообщение » Вызвано исключение. Run-Time Check Failure #2 — Stack around the variable ‘myArr’ was corrupted «
Хотелось бы узнать, как не допустить возникновение этой ошибки в дальнейшем.Что я сделал не так?Ничего не понимаю, что за ошибка проверки времени выполнения…Помогите
Прошу прощение за создание таких тем, но хотелось бы узнать в чем собственно заключается ошибка, что бы в дальнейшем избегать её…
Как видно по скринам программа просто не завершается.
5da4d930b60be125615987.png
5da4d93d5d9d9695432884.png

Понравилась статья? Поделить с друзьями:
  • Ошибка stabilitrak opel astra j
  • Ошибка ssps на санг енг рекстон
  • Ошибка sso1000 samsung телевизор что делать
  • Ошибка ssl61 сертификат безопасности сервера выдан
  • Ошибка srs w211 что значит