Другие языки программирования и технологии

Почему ругается на mas в 22 строке . Код ошибки С4703 (копия внутри) . Как исправить? С++

error C4703: используется потенциально неинициализированная локальная переменная-указатель "mas"c:\users\ramesses\documents\c++ пм-13-1д\maccub poct xapaktepuctuk\maccub poct xapaktepuctuk\maccub poct xapaktepuctuk.cpp22

#include "stdafx.h"

#include "iostream"

#include <stdio.h>

#include <math.h>

#include <conio.h>

#include <windows.h>

using namespace std;

int main(){

int **mas, n, m, i, j, j1, temp, temp1, sum;

bool fl;

cout << ("Введите количество строк матрицы: ") << endl;

cin >> n;

if (n<0) cout << ("Ошибка") << endl;

else

cout << ("\nВведите количество столбцов матрицы: ") << endl;

cin >> m;

if (m<0) cout << ("Ошибка") << endl;

else

mas = new int*[n]; ТУТ РУГАЕТСЯ НА mas

for (i = 0; i<n; i++)

mas[i] = new int[m];

cout << ("\nВведите элементы матрицы: ") << endl;

for (i = 0; i<n; i++)

for (j = 0; j<m; j++)

{

cout << "[" << i + 1 << "][" << j + 1 << "]= ";

cin >> mas[i][j];

}

cout << ("\nИсходная матрица") << endl;

for (i = 0; i<n; i++)

{

for (j = 0; j<m; j++)

{

cout.width(4);

cout << mas[i][j];

}

cout << endl;

}

for (j = 0; j<m - 1; j++)

for (j1 = 0; j1<m - 1 - j; j1++)

{

temp1 = temp = 0;

for (i = 0; i<n; i++)

{

if (mas[i][j1]<0 && abs(mas[i][j1]) % 2 == 1)

temp += abs(mas[i][j1]);

if (mas[i][j1 + 1]<0 && abs(mas[i][j1 + 1]) % 2 == 1)

temp1 += abs(mas[i][j1 + 1]);

}

if (temp>temp1)

for (i = 0; i<n; i++)

{

temp = mas[i][j1];

mas[i][j1] = mas[i][j1 + 1];

mas[i][j1 + 1] = temp;

}

}

cout << ("\nПолученная матрица") << endl;

for (i = 0; i<n; i++)

{

for (j = 0; j<m; j++)

{

cout.width(4);

cout << mas[i][j];

}

cout << endl;

}

cout << endl;

for (i = 0; i<m; i++)

{

sum = 0;

fl = true;

for (j = 0; j<n; j++)

{

sum += mas[j][i];

if (mas[j][i]<0)

fl = false;

}

cout << ("в столбце ") << i + 1;

if (!fl)

cout << (" есть орицательный элемент и сумма его элементов равна ") << sum << endl;

else

cout << (" нет отрицательного элемента") << endl;

}

cout << endl;

system("pause");

return 0;

}
в цикле n на m поменяй
Александр Котельников
Александр Котельников
7 295
Лучший ответ
Расул Баужанов все-равно ругается, что она потенциально не инициализирована.
// Решайте задачи по мере их поступления
#include <iostream>
using namespace std;
int** create_matrix(const size_t, const size_t);
int* create_vector(const size_t);
void fill_zero(int**, const size_t, const size_t);
void fill_zero(int*, const size_t);
void print(int**, const size_t, const size_t);
void print(int*, const size_t);
void destroy(int**, const size_t);
int main() {
cout << "Rows: "; size_t rows; cin >> rows;
cout << "Cols: "; size_t cols; cin >> cols;
int** matrix = nullptr;
if (matrix = create_matrix(rows, cols)) { // создали матрицу, выделив под неё память
fill_zero(matrix, rows, cols); // заполнили её нулями
print(matrix, rows, cols); // полюбовались результатом
destroy(matrix, rows); // освободили ресурсы памяти
matrix = nullptr;
} else cout << "Memory error!\n";
cin.sync();
cin.get();
}
int** create_matrix(const size_t rows, const size_t cols) {
int** matrix = nullptr;
if (matrix = new(nothrow) int*[rows]) {
for (size_t row = 0; row < rows; ++row) {
if (matrix[row] = create_vector(cols));
else { // а вдруг, где-то в процессе выделения, закончится оперативная память?
for (size_t r = 0; r < row; ++r) delete[] matrix[r];
delete[] matrix;
matrix = nullptr;
break;
}
}
}
return matrix;
}
int* create_vector(const size_t size) { return new(nothrow) int[size]; }
void fill_zero(int** matrix, const size_t rows, const size_t cols) { for (size_t r = 0; r < rows; ++r) fill_zero(matrix[r], cols); }
void fill_zero(int* vector, const size_t size) { for (size_t i = 0; i < size; ++i) vector[i] = 0; }
void print(int** matrix, const size_t rows, const size_t cols) { for (size_t r = 0; r < rows; ++r) print(matrix[r], cols); }
void print(int* vector, const size_t size) { for (size_t i = 0; i < size; ++i) cout << ' ' << vector[i]; cout << '\n'; }
void destroy(int** matrix, size_t row) {
if (matrix && row) {
for (size_t r = 0; r < row; ++r) delete[] matrix[r];
delete[] matrix;
}
}
Расул Баужанов Спасибо, но с таким решением меня препод пошлет очень далеко ибо знает что сделал не я )