Stack around the variable was corrupted - C (СИ) (150274)

Узнай цену своей работы

Формулировка задачи:

Непонятно, почему возникает данная ошибка, причем она возникает на том моменте, когда уже нет никакой записи в переменную ans. 106 строка. Прошу помочь.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iomanip>
#include <math.h>
#include <ctype.h>
#include <conio.h>
#include <iostream>
#include <stdlib.h>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int mass[20][20], mass1[20][20], res[20][20], i, k, j, z, n, x, y,z1;
    char ans;
    printf("Введите размер исходных 2 - x матриц - не более 20\n");
    printf("Вы ввели: ");
    scanf_s("%d", &n);
    if (n > 0 && n < 21)
    {
        printf("\n");
        printf("----------\n");
        printf("Матрица 1\n");
        printf("----------\n");
        printf("\n");
        printf("1 - Автозаполнение матрицы 1 случайными значениями\n");
        printf("2 - Ввод данных для матрицы 1 с клавиатуры \n");
        printf("3 - Заполнение диагонали матрицы 1 единицами\n");
        printf("\n");
        printf("Вы ввели: ");
        scanf("%d", &z);
        switch (z)
        {
        case 1:
        {
            for (i = 0; i < n; i++)
            {
 
                for (j = 0; j < n; j++)
                    mass[i][j] = rand();
            }
            printf("\n");
            printf("---------------\n");
            printf("Ваш результат: \n");
            printf("---------------\n");
            for (i = 0; i < n; i++)
            {
                printf("\n");
                for (j = 0; j < n; j++)
                    printf("%d\t", mass[i][j]);
            }
            printf("\n"); break;
        }
        case 2:
        {
            for (i = 0; i < n; i++)
 
                for (j = 0; j < n; j++)
                {
                    printf("Введите элемент первой матрицы %d.%d : ", i + 1, j + 1);
                    if (scanf("%d", &mass[i][j]) != 1) {
                        for (;;)
                        {
                            gets(&ans);
                            printf("Вы ввели неверное значение! Попробовать еще? (y / n): ");
                            scanf("%s", &ans);
                            if (strlen(&ans) == 1)
                            {
                                if (ans == 'y')
                                {
                                    system("cls");
                                    break;
                                }
                                if (ans == 'n')
                                {
                                    system("cls");
                                    exit(0); return 1;
                                }
                            }
                        }
                    }
                }break;
 
        }
        case 3:
        {
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                    if (i == j)
                        mass[i][j] = 1;
                    else mass[i][j] = 0;
            }
            printf("\n");
            printf("Ваша заполненная матрица 1: ");
            printf("\n");
            for (i = 0; i < n; i++)
            {
                printf("\n");
                for (j = 0; j < n; j++)
                    printf("%d\t", mass[i][j]);
            }
            printf("\n");
 
        }break;
        }  
        for (;;)
        {
            gets(&ans);
            printf("\n");
            printf("Вы хотите редактировать полученную матрицу 1? (y / n): ");
            scanf("%s", &ans);
            if (strlen(&ans) == 1)
            {
                if (ans == 'y')
                {
                    printf("Введите номер строки элемента матрицы: ");
                    if (scanf_s("%d", &x))
                    {
                        printf("Введите номер столбца элемента матрицы: ");
                        if (scanf_s("%d", &y))
                        {
                            if (x <= i && y <= j)
                            {
                                printf("Введите новое значение элемента матрицы 1 (%d,%d): ", x, y);
                                if (scanf_s("%d", &mass[x - 1][y - 1]))
                                {
                                    for (i = 0; i < n; i++)
                                    {
                                        for (j = 0; j < n; j++)
                                        {
                                            printf("%d\t", mass[i][j]);
                                        }
                                        printf("\n");
                                    }
                                }
 
                            }
 
                        }
 
                    }
                }
                if (ans == 'n')
                {
                    break;
                }
            }
        }
        printf("\n");
        printf("----------\n");
        printf("Матрица 2\n");
        printf("----------\n");
        printf("\n");
        printf("4 - Автозаполнение матрицы 2 случайными значениями\n");
        printf("5 - Ввод данных для матрицы 2 с клавиатуры \n");
        printf("6 - Заполнение диагонали матрицы 2 единицами\n");
        printf("\n");
        printf("Вы ввели: ");
        scanf("%d", &z);
        switch (z)
        {
        case 4:
        {
            for (i = 0; i < n; i++)
            {
 
                for (j = 0; j < n; j++)
                    mass1[i][j] = rand();
            }
            printf("\n");
            printf("---------------\n");
            printf("Ваш результат:\n");
            printf("---------------\n");
            for (i = 0; i < n; i++)
            {
                printf("\n");
                for (j = 0; j < n; j++)
                    printf("%d\t", mass1[i][j]);
            }
            printf("\n"); break;
        }
        case 5:
        {
            for (i = 0; i < n; i++)
 
                for (j = 0; j < n; j++)
                {
                    printf("Введите элемент второй матрицы %d.%d : ", i + 1, j + 1);
                    if (scanf("%d", &mass[i][j]) != 1) {
                        for (;;)
                        {
                            gets(&ans);
                            system("cls");
                            printf("Вы ввели неверное значение! Попробовать еще? (y / n): ");
                            scanf("%s", &ans);
                            if (strlen(&ans) == 1)
                            {
                                if (ans == 'y')
                                {
                                    system("cls");
                                    main();
                                }
                                if (ans == 'n')
                                {
                                    system("cls");
                                    exit(0); return 1;
                                }
                            }
                        }
                    }
                }
            break;
        }
        case 6:
        {
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                    if (i == j)
                        mass1[i][j] = 1;
                    else mass1[i][j] = 0;
            }
            printf("\n");
            printf("Ваша заполненная матрица 2: ");
            printf("\n");
            for (i = 0; i < n; i++)
            {
                printf("\n");
                for (j = 0; j < n; j++)
                    printf("%d\t", mass1[i][j]);
            }
            printf("\n");
 
        }break;
        
        }
    }   return 0;
}

Решение задачи: «Stack around the variable was corrupted»

textual
Листинг программы
if (ans == 'y' && getchar()=='\n')
do_something();

ИИ поможет Вам:


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

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы