Stack Overflow на русском Asked by Konstantin on January 3, 2021
При компиляции когда ввожу граничные значения выдает ошибку о переполнении массива:
Run-Time Check Failure #2 – Stack around the variable ‘b’ was corrupted.
#include <iostream>
#include <time.h>
#include <windows.h>
#include <limits.h>
#define SIZE 10
using namespace std;
void rand_array(int[][SIZE], int, int);
void output(const int[][SIZE], int, int);
float diap(string, long, long);
void output_new(long[], int);
long sum(int, int[][SIZE], int);
void input_array(int[][SIZE], int, int);
void average(long[], int);
int main()
{
SetConsoleOutputCP(1251);
int a[SIZE][SIZE], row, col;
long b[SIZE];
row = diap("Введите кол-во строк матрицы-->", 0, 10);
col = diap("Введите кол-во столбцов матрицы-->", 0, 10);
int mode = diap("Enter a mode of formation(1-auto,2-manual)==>", 1, 2);
switch (mode)
{
case 1: rand_array(a, row, col);break;
case 2: input_array(a, row, col);
}
cout << "Исходная матрицаn";
output(a, row, col);
for (int i = 0; i <= col; i++)
{
b[i] = sum(i, a, row);
}
cout << "Измененная матрицаn";
output_new(b, col);
average(b, col);
return 0;
}
void rand_array(int mas[][SIZE], int r, int c)
{
srand(time(NULL));
for (int i = 0;i < r;i++)
for (int j = 0;j < c;j++)
mas[i][j] = rand() % (r * c);
return;
}
void output(const int mas[][SIZE], int r, int c)
{
for (int i = 0;i < r;i++)
{
for (int j = 0;j < c;j++)
cout << mas[i][j] << "t";
cout << endl;
}
return;
}
float diap(string s, long low, long hight)
{
float n;
cout << s;
cin >> n;
if ((n < low) || (n > hight))
{
do
{
cout << "Incorrect value, try again=>>";
cin >> n;
} while ((n < low) || (n > hight));
}
return (float)n;
}
void output_new(long n_mas[], int kol_el)
{
for (int i = 0;i < kol_el;i++)
cout << n_mas[i] << "t";
cout << endl;
int summ = 0;
float sra = 0;
return;
}
long sum(int l, int mas[][SIZE], int rows)
{
long S = 0;
for (int i = 0; i < rows; i++)
{
S += mas[i][l];
}
return S;
}
void input_array(int mas[][SIZE], int rowl, int col)
{
for (int i = 0; i < rowl; i++)
{
for (int j = 0; j < col; j++)
{
cout << "Enter element index " << "[" << i << "]" << " " << "[" << j << "]" << endl;
mas[i][j] = diap("=>", -32768, 32767);
}
}
return;
}
void average(long n_mas[], int kol_el)
{
int summ = 0;
float av = 0;
for (int i = 0; i < kol_el; i++)
summ += n_mas[i];
av = static_cast<float>(summ) / kol_el;
cout << "Average=" << av;
}
Если размер массива 10, то обратится к 10 элементу нельзя. А функция diap это пропускает. Я бы для начала написал хотя быт вот так
row = diap("Введите кол-во строк матрицы-->", 0, SIZE-1);
col = diap("Введите кол-во столбцов матрицы-->", 0, SIZE-1);
Answered by KoVadim on January 3, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP