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

При запуске программы пишет Run-Time Check Failure #2 Stack around the variable 'mas' was corrupted - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 61, средняя оценка - 4.75
I-am-forever
1 / 1 / 0
Регистрация: 03.12.2009
Сообщений: 6
24.12.2009, 02:54     При запуске программы пишет Run-Time Check Failure #2 Stack around the variable 'mas' was corrupted #1
Программа, которая генерирует 20 случайных чисел от 3.5 до 9.7, и потом сравнивает, есть ли два числа, сумма которых меньше другого числа.
Компилируется без ошибок, но при запуске пишет:
Run-Time Check Failure #2 Stack around the variable 'mas' was corrupted
Run-Time Check Failure #2 Stack around the variable 'c' 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
 
 
using namespace std;
 
void fill(double mas[], int n)
{
    for (int i=0; i<n; i++)
    {
        mas[i]=(rand()%(97-35+1)+35)/10.0;
        for (int z=0; z<i; z++)
        {
            if (mas[z]==mas[i])
            {
                i--;
                break;
            }
        }
    }
 
}
void out(double mas[], int n)
{
    for (int i=0; i<n; i++)
    {
        cout<<"Вес "<<i+1<<" арбуза - "<<mas[i]<<" кг\n";
    }
}
double maxmin (double mas[], int n)
{
    double max=mas[0];
    double min=mas[0];
    int z=0, h=0;
    for (int i=1; i<n; i++)
    {
        if (mas[i]>max)
        {
            max=mas[i];
            z=i;
 
        }
        if (mas[i]<min)
        {
            min=mas[i];
            h=i;
        }
    }
    mas[z]=min;
    mas[h]=max;
    return max;
 
}
int q(double mas[], int n, double c[3][20])
{
    int h=0;
    double p=0;
 
    for (int i=0; i<n; i++)
    {
        for (int z=i+1; z<n; z++)
        {
            for (int k=0; k<n; k++)
            {
                p=mas[i]+mas[z];
                if(mas[k]>p)
                {
                    c[0][h]=k;
                    c[1][h]=i;
                    c[2][h]=z;
                    h++;
                }
            }
            
        }
    }
    return h;
}
 
void main()
{
    SetConsoleOutputCP(1251);
    srand((unsigned)time(NULL));
 
    const int kol_vo=20;
    double mas[kol_vo];
    double c[3][kol_vo];
 
 
    fill(mas, kol_vo);
    out(mas, kol_vo);
    cout<<"Самый тяжелый арбуз весит "<<maxmin(mas,kol_vo)<<" кг\n";
    out(mas, kol_vo);
 
 
    if (q(mas, kol_vo, c)>0)
    {
        for (int i=0; i<q(mas, kol_vo, c); i++)
        {
            cout<<(c[0][i])+1<<" арбуз, тяжелее чем "<<(c[1][i])+1<<" арбуз + "<<(c[2][i])+1<<" арбуз\n";
 
        }
    }
    else
    {
        cout<<"Нет арбуза, который весит больше двуx других! \n";
    }
 
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2009, 02:54     При запуске программы пишет Run-Time Check Failure #2 Stack around the variable 'mas' 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 'a' was corrupted.
Run-Time Check Failure #2 - Stack around the variable 'hexStr' was corrupted C++
Run-Time Check Failure #2 - Stack around the variable 'n' was corrupted C++
C++ Run-Time Check Failure #2 - Stack around the variable 'buf2' was corrupted
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
24.12.2009, 03:42     При запуске программы пишет Run-Time Check Failure #2 Stack around the variable 'mas' was corrupted #2
Где-то выход за пределы массива.
I-am-forever
1 / 1 / 0
Регистрация: 03.12.2009
Сообщений: 6
24.12.2009, 12:23  [ТС]     При запуске программы пишет Run-Time Check Failure #2 Stack around the variable 'mas' was corrupted #3
а где??
я пыталась найти, но не получается((
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
24.12.2009, 16:15     При запуске программы пишет Run-Time Check Failure #2 Stack around the variable 'mas' was corrupted #4
А программа успевает что-ниюудь вывести? Функция fill содержит бесконечный цикл. Пересмотри функцию q , особенно использование переменной h.
I-am-forever
1 / 1 / 0
Регистрация: 03.12.2009
Сообщений: 6
26.12.2009, 23:36  [ТС]     При запуске программы пишет Run-Time Check Failure #2 Stack around the variable 'mas' was corrupted #5
В функции fill нет бесконечного цикла.
Она просто заполняет массив случайными цифрами, которые не повторяются.
спасибо за помощь.
нашла свою ошибку.
просто создала слишком маленький массив
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.12.2009, 06:53     При запуске программы пишет Run-Time Check Failure #2 Stack around the variable 'mas' was corrupted #6
Функция работает толко потому, что в с++ нельзя сравнивать числа с пловающей точкой в лоб. Для этого используется такая конструкция fabs(num1 - num2 ) < 0.000001, количество нулей зависит от требуемой степени точности. Чтобы функция нормально работала сделай второй цикл так
for (int z = i - 1; z >= 0; z--)
Yandex
Объявления
27.12.2009, 06:53     При запуске программы пишет Run-Time Check Failure #2 Stack around the variable 'mas' was corrupted
Ответ Создать тему
Опции темы

Текущее время: 03:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru