С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
4 / 4 / 1
Регистрация: 25.03.2015
Сообщений: 63
1

Stack around the variable 'i' was corrupted

08.09.2015, 22:10. Показов 1956. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создать массив указателей на функцию. Ввести цифру, которая обозначает функцию, которую необходимо выполнить: 0 – найти последнее положительное,
1 – умножить числа,
2 – посчитать среднее значение.

Программа выполняется, но в конце выскакивает ошибка - Run-Time Check Failure #2 - Stack around the variable 'i' 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
void main (void)
{
    int ladd (int, int);
    int mul (int, int);
    int avg (int, int);
 
    int (*y[10]) (int, int) = {ladd, mul, avg};
 
    char *str[  ] = {"ladd", "mul", "avg"};
    int m, n;         
    char i = '0';
 
        while (i)
        {
            system("pause");
            system("cls");
 
            puts ("Input the operation: \n");
            puts ("0 - to find last positive \n");
            puts ("1 - to find result of multiplication \n");
            puts ("2 - to find average value \n");
            puts ("9 - exit \n");
 
            scanf("%d", &i);
                if ( i == 9 )  return;
                if ( i < 0  ||  i > 2 )
                    {
                        puts ("Incorrect operation code \n");
                        system("cls");
                        continue;
                }
                    
 
 
    puts ("Input the operands (m, n): \n");
    scanf("%d%d", &m, &n);
 
    printf ("%s= %d \n", str[i],(*y[i]) (m, n) ); 
                    }
        }
 
    int avg (int m, int n)    {return (( m + n ) / 2); }
    int ladd (int m, int n)    {return ( m > n ) ? m: n; }
    int mul (int m, int n)    {return  m * n; }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.09.2015, 22:10
Ответы с готовыми решениями:

Stack around the variable was corrupted
void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); double c,x,y,f; char k;...

Stack around the variable 's' was corrupted
Помогите, пожалуйста, решить проблему.При большом вводе: &quot;Stack around the variable 's' was...

Stack around the variable was corrupted
Непонятно, почему возникает данная ошибка, причем она возникает на том моменте, когда уже нет...

Stack around the variable 'e' was corrupted
Программа работает, но после закрытия консоли пишет ошибку &quot;Stack around the variable 'e' was...

10
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
08.09.2015, 22:37 2
Лучший ответ Сообщение было отмечено L1oN как решение

Решение

Цитата Сообщение от L1oN Посмотреть сообщение
void main (void)
int main
Цитата Сообщение от L1oN Посмотреть сообщение
int ladd (int, int); int mul (int, int); int avg (int, int);
не надо прототипы объявлять внутри функции
Цитата Сообщение от L1oN Посмотреть сообщение
char i = '0';
Цитата Сообщение от L1oN Посмотреть сообщение
scanf("%d", &i);
или int i, или %c
Цитата Сообщение от L1oN Посмотреть сообщение
if ( i == 9 ) return; if ( i < 0 || i > 2 )
при этом нужно помнить, что '0' и 0 это не одно и то же
1
4 / 4 / 1
Регистрация: 25.03.2015
Сообщений: 63
08.09.2015, 22:56  [ТС] 3
Если поменять char на int, то программа вообще не запускается, то есть сразу закрывается.
Если сменить на символ %c то тогда всегда получается условие, при котором значение i выходит из допустимых значений - Incorrect operation code
Если меняю void main(void) на int main() то программа так же моментально закрывается.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.09.2015, 07:58 4
Лучший ответ Сообщение было отмечено L1oN как решение

Решение

L1oN, где новый код???
Цитата Сообщение от L1oN Посмотреть сообщение
Если сменить на символ %c то тогда всегда получается условие, при котором значение i выходит из допустимых значений - Incorrect operation code
я не зря написал, что 0 и '0' это не одно и то же.
Цитата Сообщение от L1oN Посмотреть сообщение
Если меняю void main(void) на int main() то программа так же моментально закрывается.
функция main должна возвращать int.
1
4 / 4 / 1
Регистрация: 25.03.2015
Сообщений: 63
09.09.2015, 16:55  [ТС] 5
Всё, проблема решена, спасибо вам, Программа не возвращала значение в случае выхода при помощи 9. Так же я не задержал консоль в конце. Вместо символа поставил int и всё работает без ошибок, ещё раз - спасибо за помощь.
Тему клоз
0
Заблокирован
09.09.2015, 17:41 6
Цитата Сообщение от L1oN Посмотреть сообщение
Вместо символа поставил int и всё работает без ошибок
Есть минус.
С char приложение устойчиво к вводу чего угодно. С int валится при вводе чего-либо, отличного от чисел.
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
09.09.2015, 18:01 7
Цитата Сообщение от IrineK Посмотреть сообщение
С int валится при вводе чего-либо, отличного от чисел.
Цитата Сообщение от L1oN Посмотреть сообщение
C
1
scanf("%d", &i);
заменить на
C
1
2
3
4
5
6
if (!scanf("%d", &i))
{
    printf("Incorrect input!");
    getchar();
    continue;
}
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
09.09.2015, 19:51 8
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
C
1
if (!scanf("%d", &i))
C
1
if ( scanf("%d", &i) != 1 )
Return Value

These functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure.

The value EOF is returned if the end of input is reached before either the first successful conversion or a matching failure occurs. EOF is also returned if a read error occurs, in which case the error indicator for the stream (see ferror(3)) is set, and errno is set indicate the error.
man scanf
1
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
09.09.2015, 20:07 9
Цитата Сообщение от easybudda Посмотреть сообщение
C
1
if ( scanf("%d", &i) != 1 )
В данном конкретном случае разницы не вижу. Я сначала проверил трижды, чем писать. Но все равно спасибо за замечание.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
09.09.2015, 20:18 10
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Я сначала проверил трижды, чем писать.
Символ окончания ввода (Ctrl-D в *NIX, Ctrl-Z в Win) тоже пробовал?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(void) {
    int n;
    
    printf("Number: ");
    if ( ! scanf("%d", &n) )
        printf("Incorrect input!\n");
    else
        printf("All right, value is %d\n", n);
    
    return 0;
}
Код
[andrew@andrew shitcode]$ gcc wrong_check.c 
[andrew@andrew shitcode]$ ./a.out 
Number: All right, value is 12623860
[andrew@andrew shitcode]$

Не по теме:

Вот так обычно и бывает - на голове каску три раза проверил, а прилетело по заднице ;)

1
Kerry_Jr
09.09.2015, 21:02     Stack around the variable 'i' was corrupted
  #11

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
а прилетело по заднице
каска слетела, и по голове прилетело :)

0
09.09.2015, 21:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2015, 21:02
Помогаю со студенческими работами здесь

Задание со структурой - Stack around the variable 'd' was corrupted
В конце программы выдает такую ошибку : Run-Time Check Failure #2 - Stack around the variable 'd'...

Run-Time Check Failure #2 - Stack around the variable 'y' was corrupted
Даны два строго упорядоченных по возрастанию массива X и Y из n элементов каждый. В массиве X найти...

Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted
Выдает ошибку &quot;Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.&quot;...

Run-Time Check Failure #2 - Stack around the variable '_continue_value' was corrupted
Пишу в VS 2015 и после запуска в конце появляется предупреждение Run-Time Check Failure #2 - Stack...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru