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

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

Войти
Регистрация
Восстановить пароль
 
kyra
0 / 0 / 1
Регистрация: 01.03.2014
Сообщений: 9
#1

STATUS_STACK_BUFFER_OVERRUN - C++

01.03.2014, 22:40. Просмотров 588. Ответов 6
Метки нет (Все метки)

Здравствуйте,

Сделана (вроде логично) простая программка.
Не работает из-за переполнения буфера О_о
trace to cursor показал что из функции вылетаю после указания/чтения 7го эл-та матрицы.
Как мне быть?
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
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <cmath>
#include <algorithm>
#include <string.h>
 
using namespace std;
 
 
int MMcriteria(int* mat)
{
    int a,b,c,d;
 
    for(int i=0; i<=3; i++)
    {
        int per = mat[i*5];
        for(int j=0; j<=4;j++)
        {
 
            if (per >=mat[i*5+j]) 
            {       
                per=mat[i*5+j];
                switch (i)
                {
                case 0:
                    
                     a=per;
                    
                    break;
                case 1:
                    
                    b=per;
                    
                    break;
                case 2:
                    
                    c=per;
                    
                    break;
                case 3:
                    
                    d=per;
                    
                    break;
                }
            }
            
        }
    }
int stol[4];
    stol[1]=a;
    stol[2]=b;
    stol[3]=c;
    stol[4]=d;
    printf ("%d\n", a);
    
int* res=min_element(stol,stol+4);
int r=*res;
printf ("%d\n", r);
if (a==r) printf("%s\n", "decision # X1 has to be implemented");
if (b==r) printf("%s\n", "decision # X2 has to be implemented");
if (c==r) printf("%s\n", "decision # X3 has to be implemented");
if (d==r) printf("%s\n", "decision # X4 has to be implemented");
return 0;
//getch();
}
 
    
    
    
     
 
 
int main(void)
 
{   
    int mart[4][5] = {5,10,0,-6,17,
                      3,14,8,9,2,
                      1,5,14,20,-3,
                      7,19,10,2,0};
 
    
    MMcriteria(&mart[0][0]);
 
 
    
        
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2014, 22:40     STATUS_STACK_BUFFER_OVERRUN
Посмотрите здесь:

Краш программы с STATUS_STACK_BUFFER_OVERRUN C++ WinAPI

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6856 / 4067 / 927
Регистрация: 30.01.2014
Сообщений: 6,864
02.03.2014, 00:29     STATUS_STACK_BUFFER_OVERRUN #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от kyra Посмотреть сообщение
Как мне быть?
Может так попробовать?
C++
1
2
3
4
5
6
7
8
9
10
11
int main(void)
{
    int mart[4 * 5] = {5,10,0,-6,17,
                      3,14,8,9,2,
                      1,5,14,20,-3,
                      7,19,10,2,0
                     };
 
    MMcriteria(mart);
    //....
}
Добавлено через 4 минуты
C++
1
2
3
4
5
int stol[4]; // помним, что индексы, с нуля.
    stol[0]=a;
    stol[1]=b;
    stol[2]=c;
    stol[3]=d;
kyra
0 / 0 / 1
Регистрация: 01.03.2014
Сообщений: 9
02.03.2014, 13:47  [ТС]     STATUS_STACK_BUFFER_OVERRUN #3
Спасибо огромное!!!
Я сидела тупила целый день перед монитором, не могла разобраться.
Применила советы что вы дали мне ( и про размерность и про индексы) - всё заработало.
Прям отпустило
Спасибо ещё раз
kyra
0 / 0 / 1
Регистрация: 01.03.2014
Сообщений: 9
03.03.2014, 22:34  [ТС]     STATUS_STACK_BUFFER_OVERRUN #4
DrOffset, помогите мне, пожалуйста, ещё раз, если у вас будет время и желание.
То же делала, но типы на float поменяла.
Та же ошибка вылезает. Это ошибка кода, или от "железа" зависит...хотя плохому танцору, как говорится...
вот код:
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <cmath>
#include <algorithm>
#include <string.h>
 
using namespace std;
 
 
void BL(float* mat2)
{
    
    float q1 = 0.05;
    float q2 = 0.15;
    float q3 = 0.35;
    float q4 = 0.25;
    float q5 = 0.20;
 
 
    for(int j=0; j<=4; j++)
    {
        for(int i=0; i<=4;i++)
        {
             switch (j)
                {
                case 0:
                    
                    mat2[i*5+j] = mat2[i*5+j]*q1;
                    
                    break;
                case 1:
                    
                    mat2[i*5+j] = mat2[i*5+j]*q2;
                    
                    break;
                case 2:
                    
                    mat2[i*5+j] = mat2[i*5+j]*q3;
                    
                    break;
                case 3:
                    
                    mat2[i*5+j] = mat2[i*5+j]*q4;
                    
                    break;
                case 4:
 
                    mat2[i*5+j] = mat2[i*5+j]*q5;
                    break;
 
                }
            }
            
        }
 
 
float a,b,c,d,e;
 a = 0;
 b = 0;
 c = 0;
 d = 0;
 e = 0;
 
for(int i=0; i<=4; i++)
    {
        
        for(int j=0; j<=4;j++)
        {
                    
               switch (i)
                {
                case 0:
                    
                     a = a+mat2[i*5+j];
                    
                    break;
                case 1:
                    
                     b = b+mat2[i*5+j];
                    
                    break;
                case 2:
                    
                    c = c+mat2[i*5+j];
                    
                    break;
                case 3:
                    
                    d = d+mat2[i*5+j];
                    
                    break;
                case 4:
 
                    e = e+mat2[i*5+j];
 
                    break;
 
                }
            }
            
        }
 
 
 
 
float stol[5];
    stol[0]=a;
    stol[1]=b;
    stol[2]=c;
    stol[3]=d;
    stol[5]=e;
    
    
float* res=max_element(stol,stol+5);
float r=*res;
printf ("%s\n", "BL criteria:");
printf ("%s", "expected income before taxes: "," ", "%lf\n", r);
if (a==r) printf("%s\n", "decision # X1 has to be implemented: ordering 100 cars");
if (b==r) printf("%s\n", "decision # X2 has to be implemented: ordering 150 cars");
if (c==r) printf("%s\n", "decision # X3 has to be implemented: ordering 200 cars");
if (d==r) printf("%s\n", "decision # X4 has to be implemented: ordering 250 cars");
if (e==r) printf("%s\n", "decision # X5 has to be implemented: ordering 300 cars");
 
 
 
//getch();
}
 
 
    
    
 
 
 
void main(void)
 
{   
    
 
    float mart3[5*5] = {2400,2400,2400,2400,2400,
                      1900,3600,3600,3600,3600,
                      1400,3100,4800,4800,4800,
                      900,2600,4300,6000,6000,
                      400,2100,3800,5500,7200};
 
 
    //MMcriteria(&mart[0][0]);
 
    
    
    BL(mart3);
    
    
        
    getch();
 
}
DrOffset
6856 / 4067 / 927
Регистрация: 30.01.2014
Сообщений: 6,864
03.03.2014, 22:36     STATUS_STACK_BUFFER_OVERRUN #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
У вас индекс поплыл:
C++
1
stol[5]=e; // тут надо stol[4] = e;
kyra
0 / 0 / 1
Регистрация: 01.03.2014
Сообщений: 9
04.03.2014, 23:42  [ТС]     STATUS_STACK_BUFFER_OVERRUN #6
DrOffset, спасибо большое.
Извините за эту нелепость .
Буду внимательнее.
Всё запустилось, после того как исправила этот индекс .
DrOffset
04.03.2014, 23:47     STATUS_STACK_BUFFER_OVERRUN
  #7

Не по теме:

kyra, да ладно, чего извиняться Вы может целый день бы убили, а у нас тут глаз наметанный.

Yandex
Объявления
04.03.2014, 23:47     STATUS_STACK_BUFFER_OVERRUN
Ответ Создать тему
Опции темы

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