Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.84
yarigk
0 / 0 / 0
Регистрация: 19.07.2010
Сообщений: 12
#1

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

08.05.2012, 16:19. Просмотров 3369. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2012, 16:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted. (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
08.05.2012, 16:28 #2
где то выход за границы
0
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.05.2012, 18:29 #3
У меня всё работает нормально. Хотя я сначала немного подправил код. Однако сути это не изменило.
В какой момент вылетает? Успевает вывести введённый массив?

Не по теме:

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

0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.05.2012, 18:33 #4
Цитата Сообщение от elivin Посмотреть сообщение
У меня всё работает нормально.
Т.е. ты вводишь размер массива больше 5 и у тебя всё оК? О_о
0
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.05.2012, 18:40 #5
Абсолютно верно. Пардон, не знаю как приклеплять миниатюры: скрин
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 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
elivin
65 / 65 / 1
Регистрация: 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
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.05.2012, 20:06 #8
Цитата Сообщение от elivin Посмотреть сообщение
Wall проверка переполнения.
Конкретно про MSVC если говорить, то wall это только статические проверки, т.е. на этапе компиляции. А тут ошибка периода выполнения. Поищи параметр с названием похожим на "Buffer security check".
0
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.05.2012, 20:17 #9
Цитата Сообщение от Deviaphan Посмотреть сообщение
Конкретно про MSVC если говорить
Только не VS, а g++ (и gcc естественно). Хотя в нём похоже это тоже только статические проверки. Первая же ссылка гугла советует мне использовать библиотеки типа GNU MP (multi-precision). Однако, мне раньше не приходилось сталкиваться с такого рода ошибками и использовать какие-либо допольнительные библиотеки для проверки считаю излишними. Пожалуй, обойдусь без них.
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 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
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.05.2012, 10:42 #11
Цитата Сообщение от elivin Посмотреть сообщение
Первая же ссылка гугла советует мне использовать библиотеки типа GNU MP (multi-precision).
Это вообще другое.
Под линухом можно valgrind использовать. А run-time проверки программу замедляют, поэтому не используются. Хотя, возможно, их можно включить каким-нибудь ключом.
UPD: Ключик и правда есть, но только для джавы и фортрана.
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.05.2012, 10:56 #12
Цитата Сообщение от diagon Посмотреть сообщение
run-time проверки программу замедляют
Да это всё миф.) Тем более, если в дебаге.)))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2012, 10:56
Привет! Вот еще темы с ответами:

Run-Time Check Failure #2 - Stack around the variable 'dt' was corrupted - C++
Я понимаю что ошибка говорит о том что где-то вышел за диапазон массива, я перепроверил все циклы, вроде все гладко с индексами. данная...

Run-Time Check Failure #2 - Stack around the variable 'hexStr' was corrupted - C++
вот код: char baseStr = &quot;some number&quot;; char hexStr = &quot;0x\0&quot;; cout &lt;&lt; strcat(hexStr, baseStr) &lt;&lt; &quot;\n&quot;; cin.get(); return 0;...

Run-Time Check Failure #2 - Stack around the variable 'gunpowder' was corrupted - C++
После успешного завершения выдаёт &quot;Run-Time Check Failure #2 - Stack around the variable 'gunpowder' was corrupted.&quot; int main(void) { ...

Run-Time Check Failure #2 - Stack around the variable 'flag' was corrupted - C++
выдаёт такую ошибку по завершению выполнения этой пп-мы. в чём может быть дело? CfgOfSquare { POINT pt; HBRUSH brush; HPEN...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.05.2012, 10:56
Ответ Создать тему
Опции темы

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