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

STATUS_STACK_BUFFER_OVERRUN

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

Author24 — интернет-сервис помощи студентам
Здравствуйте,

Сделана (вроде логично) простая программка.
Не работает из-за переполнения буфера О_о
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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2014, 22:40
Ответы с готовыми решениями:

STATUS_STACK_BUFFER_OVERRUN encountered Project1.exe вызвал срабатывание точки останова
Такое сообщение от отладчика я увидел при выполнении моего кода, но я думаю что причина конкретно в...

Краш программы с STATUS_STACK_BUFFER_OVERRUN
Привет всем! Делаю программу, основанную на рекурсивном поиске файлов, и всё работает отлично,...


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

Или воспользуйтесь поиском по форуму:
6
18838 / 9839 / 2406
Регистрация: 30.01.2014
Сообщений: 17,279
02.03.2014, 00:29 2
Лучший ответ Сообщение было отмечено kyra как решение

Решение

Цитата Сообщение от 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;
1
0 / 0 / 1
Регистрация: 01.03.2014
Сообщений: 18
02.03.2014, 13:47  [ТС] 3
Спасибо огромное!!!
Я сидела тупила целый день перед монитором, не могла разобраться.
Применила советы что вы дали мне ( и про размерность и про индексы) - всё заработало.
Прям отпустило
Спасибо ещё раз
0
0 / 0 / 1
Регистрация: 01.03.2014
Сообщений: 18
03.03.2014, 22:34  [ТС] 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();
 
}
0
18838 / 9839 / 2406
Регистрация: 30.01.2014
Сообщений: 17,279
03.03.2014, 22:36 5
Лучший ответ Сообщение было отмечено kyra как решение

Решение

У вас индекс поплыл:
C++
1
stol[5]=e; // тут надо stol[4] = e;
1
0 / 0 / 1
Регистрация: 01.03.2014
Сообщений: 18
04.03.2014, 23:42  [ТС] 6
DrOffset, спасибо большое.
Извините за эту нелепость .
Буду внимательнее.
Всё запустилось, после того как исправила этот индекс .
0
DrOffset
04.03.2014, 23:47     STATUS_STACK_BUFFER_OVERRUN
  #7

Не по теме:

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

0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru