Проблема при переполнении памяти в выводе изменённой матрицы. Задача: По указанию пользователя с положительных четных или отрицательных нечетных элементов матрицы mt (5,6) образовать одномерный массив, элементы которого разместить в прямой последовательности. Также если можете, помогите пожалуйста с заполнением с клавиатуры. Спасибо большое. :)
#include <iostream>
#include <ctime>
using namespace std;
int main() {
setlocale(LC_ALL, "ru");
// организация работы рандома
srand(time(NULL));
// строки матрицы
const int m = 5;
// колонки матрицы
const int t = 6;
// инициализация матрицы, sw - выбор операции
int mt[m][t], sw;
// индексы динамических массивов
int a = 0, b = 0;
// инициализация динамических массивов
int* W = new int[a];
int* S = new int[b];
// заполнение матрицы рандомом
cout << "Ваша матрица:" << endl;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < t; j++)
{
mt[i][j] = rand() % 100;
cout << mt[i][j] << " ";
// cin >> mt[i][j]; - заполнение вручную
}
cout << endl;
}
// меню выбора операции (2 не выведет, т. к. промежуток от 0 до 100) либо заполняем ручками
cout << "Выберите операцию:" << endl;
cout << "1. Создать массив с положительных парных элементов." << endl;
cout << "2. Создать массив с отрицательных непарных элементов." << endl;
cin >> sw;
if (sw == 1) {
// проход по массиву
for (int i = 0; i < m; i++)
{
for (int j = 0; j < t; j++)
{
// поиск чётных элементов массива больше 0
if (mt[i][j] % 2 == 0 && mt[i][j] > 0)
{
// заполнение одномерного массива
W[a] = mt[i][j];
a++;
}
}
}
// вывод одномерного массива из парных элементов двумерного
cout << "Ваш массив положительных чётных элементов:" << "\n";
for (int i = 0; i < a; i++)
{
cout << W[i] << " ";
}
// чистка памяти
delete[] W;
}
if (sw == 2) {
// проход по массиву
for (int i = 0; i < m; i++)
{
for (int j = 0; j < t; j++)
{
// поиск нечётных элементов массива меньше 0
if (mt[i][j] % 2 == 1 && mt[i][j] < 0)
{
// заполнение одномерного массива
W[b] = mt[i][j];
a++;
}
}
}
// вывод одномерного массива из непарных элементов двумерного
cout << "Ваш массив отрицательных нечётных элементов:" << "\n";
for (int i = 0; i < b; i++)
{
cout << S[i] << " ";
}
}
}
Посмотрите внимательно на участок
int* W = new int[a];
int* S = new int[b];
У Вас a
и b
равны нулю, т.е. Вы говорите выделить 0 байт, а дальше идет запись в эти массивы, и само собой записать туда ничего не получается
Самое простое что можно для примера предложить, это выделить массивы размером m*t
, тогда Вы будете уверены что массив достаточного размера, что бы вместить все элементы из mt
:
int* W = new int[m*t];
int* S = new int[m*t];
PS: 1. Вообще у Вас почему-то в секуции, где sw == 2
запись идет в массив W а выводите массив S. Да и в целом тут одного массива бы хватило, можно не заволить отдельно W и S, если дальше Вам они оба действительно не нужны
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть вещественные числа a, b и сНужно чтобы выполнялось выражение c == (b - a), проблема возникает именно с "равно"
Предыстория: мне нужно реализовать алгоритм быстрой сортировки для односвязного списка
Как используя средства WinApi безопасно извлечь телефон или компьютерную мышь из usb порта? Уже пробовал использовать CM_Request_Eject(), удалось извлечь...
Не уверен, что правильно понял ваши пожелания, но все же: