0 / 0 / 0
Регистрация: 19.07.2010
Сообщений: 12
1

Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.

08.05.2012, 16:19. Показов 5970. Ответов 11
Метки нет (Все метки)

Здравствуйте.
Пишу две функции: ввод и вывод целочисленного массива, в конце программы вылетает такая ошибка, и я уже понял почему(кажется потому что у нас массив длиной 5, а длину должен задавать пользователь), но не знаю как исправить. Текст файла исходного кода и заголовочного файла. Помогите исправить пожалуйста

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 #include <math.h>
 #include <conio.h>
 #include "Function.hpp"
 #define N 5
int main(void)
{ int len;
  int a[N];
   Input_mas(a,len);
  
   Print_mas(a,len);
}
Функции

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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 5
 
 
void Input_mas (int *a, int &len)
{
int *i;
printf ("Введи кол-во элементов массива \n");
scanf ("%d", &len);
printf ("Введи элементы массива \n");
for (i = a; i < a + len; i++)
scanf("%5d", i);
}
 
 
 
void Print_mas (int a[], int n)
{
int i;
for (i = 0;i < n; i++)
printf ("%d\n",a[i]);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2012, 16:19
Ответы с готовыми решениями:

Run-Time Check Failure #2 - Stack around the variable 'c' was corrupted
Добрый день, уважаемые представители форума. При решении простейшей задачи возникла такая ошибка:...

Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted
Добрый день подскажите что это означает и как исправить данное сообщение Run-Time Check Failure #2...

Run-Time Check Failure #2 - Stack around the variable 'n' was corrupted
При вводе значение более трёх символов (это значение конечно можно регулировать) появляется...

Run-Time Check Failure #2 - Stack around the variable 'A' was corrupted
Определить класс вектор (одномерный числовой массив). В класс включить конструктор для определения...

11
599 / 567 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
08.05.2012, 16:28 2
где то выход за границы
0
67 / 67 / 9
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.05.2012, 18:29 3
У меня всё работает нормально. Хотя я сначала немного подправил код. Однако сути это не изменило.
В какой момент вылетает? Успевает вывести введённый массив?

Не по теме:

Зачем подключено столько заголовочных файлов? В Function.hpp ещё и не по разу

0
Делаю внезапно и красиво
Эксперт С++
1311 / 1226 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.05.2012, 18:33 4
Цитата Сообщение от elivin Посмотреть сообщение
У меня всё работает нормально.
Т.е. ты вводишь размер массива больше 5 и у тебя всё оК? О_о
0
67 / 67 / 9
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.05.2012, 18:40 5
Абсолютно верно. Пардон, не знаю как приклеплять миниатюры: скрин
0
Делаю внезапно и красиво
Эксперт С++
1311 / 1226 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.05.2012, 19:22 6
Цитата Сообщение от elivin Посмотреть сообщение
Абсолютно верно.
Компилятор без проверки переполнения.

Слегка дополни код и увидишь косяк
C++
1
2
3
4
5
6
7
8
9
10
11
int main(void)
{ int len;
int before = 0;
  int a[N];
int after = 0;
   Input_mas(a,len);
  
   Print_mas(a,len);
 
// тут распечатать before и after
}
0
67 / 67 / 9
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.05.2012, 19:51 7
Цитата Сообщение от Deviaphan Посмотреть сообщение
Компилятор без проверки переполнения.
Слегка дополни код и увидишь косяк
Не знаю, входит ли в функции -Wall проверка переполнения. Ну да, теперь вижу в чём проблема. Единственное что приходит в голову в качестве решения проблемы - запрашивать количество элементов перед фызовом функции заполнения массива и создавать динамический массив.
Основной файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdio>
#include "Function.hpp"
 
void Input_mas (int *a, int len);
void Print_mas (int *a, int n);
 
int main()
{ 
    int len;
    printf ("Введи кол-во элементов массива \n");
    scanf ("%d", &len);
    int *a = new int[len];
    Input_mas(a, len);
    Print_mas(a,len);
    return 0;
}
Function.hpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdio>
 
void Input_mas (int *a, int len)
{
    int *i;
    printf ("Введи элементы массива \n");
    for (i = a; i < a + len; i++)
        scanf("%5d", i);
}
 
 
 
void Print_mas (int *a, int n)
{
    int i;
    for (i = 0;i < n; i++)
        printf ("%d\n",a[i]);
}
0
Делаю внезапно и красиво
Эксперт С++
1311 / 1226 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.05.2012, 20:06 8
Цитата Сообщение от elivin Посмотреть сообщение
Wall проверка переполнения.
Конкретно про MSVC если говорить, то wall это только статические проверки, т.е. на этапе компиляции. А тут ошибка периода выполнения. Поищи параметр с названием похожим на "Buffer security check".
0
67 / 67 / 9
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.05.2012, 20:17 9
Цитата Сообщение от Deviaphan Посмотреть сообщение
Конкретно про MSVC если говорить
Только не VS, а g++ (и gcc естественно). Хотя в нём похоже это тоже только статические проверки. Первая же ссылка гугла советует мне использовать библиотеки типа GNU MP (multi-precision). Однако, мне раньше не приходилось сталкиваться с такого рода ошибками и использовать какие-либо допольнительные библиотеки для проверки считаю излишними. Пожалуй, обойдусь без них.
0
Делаю внезапно и красиво
Эксперт С++
1311 / 1226 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
09.05.2012, 07:54 10
Цитата Сообщение от elivin Посмотреть сообщение
Только не VS, а g++
Ну я потому и написал "конкретно MSVC", потому что про другие не знаю.)
Только конкретно тут даже не переполнение буфера, а порчу стека проверять нужно. Stack overflow или типа того. Наверняка есть ключ какой-нибудь, хотя бы для дебага.

Цитата Сообщение от elivin Посмотреть сообщение
GNU MP
Гугл не то советует.)

Цитата Сообщение от elivin Посмотреть сообщение
использовать какие-либо допольнительные библиотеки для проверки считаю излишними.
Если компилятор не в состоянии выполнять базовые run-time проверки, то нужно или более новую версию ставить, или плагины или другой компилятор. Чтобы потом не было утверждений:
Цитата Сообщение от elivin Посмотреть сообщение
У меня всё работает нормально.
Но я на 100% уверен, что в gcc есть для этих проверок ключик, иначе бы он скачивался сразу с бубном, мылом и верёвкой. Табуретку нужно скачать отдельно, в зависимости от длины верёвки.
А потом, застрелиться всем этим в ногу.
0
Higher
1950 / 1216 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.05.2012, 10:42 11
Цитата Сообщение от elivin Посмотреть сообщение
Первая же ссылка гугла советует мне использовать библиотеки типа GNU MP (multi-precision).
Это вообще другое.
Под линухом можно valgrind использовать. А run-time проверки программу замедляют, поэтому не используются. Хотя, возможно, их можно включить каким-нибудь ключом.
UPD: Ключик и правда есть, но только для джавы и фортрана.
0
Делаю внезапно и красиво
Эксперт С++
1311 / 1226 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
09.05.2012, 10:56 12
Цитата Сообщение от diagon Посмотреть сообщение
run-time проверки программу замедляют
Да это всё миф.) Тем более, если в дебаге.)))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2012, 10:56

Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted
Всем привет, начал недавно писать на с++, делаю программу по заполнению и сортировке элементов...

Run-Time Check Failure #2 - Stack around the variable '.' was corrupted
Сделал &quot;меню&quot; для работы со своим стеком. При вводе &quot;0&quot; выходит ошибка &quot;Run-Time Check Failure #2 -...

Run time check failure #2 stack around the variable was corrupted
Помогите пожалуйста найти ошибку, только начала писать код и уже не могу найти ошибку void main()...

Run-Time Check Failure #2 - Stack around the variable 'C' was corrupted
#include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { const int n=10;...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.