// Gaus.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
class matrix
{
private:
int n;
double **A;
double *b;
inline void ifend();
void filling();
public:
matrix() :n(0), A(NULL), b(NULL) {}
matrix(int x) :n(x)
{
b = new double[n];
A = new double *[n];
for (int i(0); i < n; i++)
{
*A = new double[n];
}
}
void constructor();
void gauss();
void show();
};
inline void matrix::ifend() //Проверка на заполнение размера матрицы
{
if (n == 0)
{
cout << "The size of matrix not found";
system("pause");
exit(0);
}
}
void matrix::constructor() //Создание системы уравнений
{
matrix::ifend();
matrix::filling();
}
void matrix::filling() //Заполнение расширенного массива
{
matrix::ifend();
for (int i(0); i < n; i++)
{
system("pause");
for (int j(0); j < n; j++)
{
cout << "a" << i + 1 << j + 1 << " = ";
system("pause");
cin >> A[i][j];
system("pause");
}
cout << "b" << i << " = ";
cin >> b[i];
}
}
void matrix::show()
{
matrix::ifend();
for (int i(0); i < n; i++)
{
for (int j(0); j < n; j++)
{
cout << A[i][j] << " * x" << j + 1;
if (j == n - 1)
cout << " = " << b[i];
else
cout << " + ";
}
cout << endl;
}
}
int main()
{
matrix obj1(3);
obj1.constructor();
system("pause");
return 0;
}
Выходит ошибка при заполнении A[2][1] т.е. во второй строчке массива. Я как-то неправильно выделяю память под двумерный массив? Первая строчка заполняется норм.
Вот это
for (int i(0); i < n; i++)
{
*A = new double[n];
}
замените на
for (int i(0); i < n; i++)
{
A[i] = new double[n];
}
А то вы всю память только для первого ряда присваиваете...
В этом цикле в конструкторе
for (int i(0); i < n; i++)
{
*A = new double[n];
}
имеет место утечка памяти, так как при каждой итерации цикла адрес выделяемой памяти перезаписывается в переменной *A
, или, что тоже самое, в A[0]
.
Правильно будет записать цикл как
for (int i(0); i < n; i++)
{
A[i] = new double[n];
}
Обратите внимание, что у вас дублируется вызов функции ifend
void matrix::constructor() //Создание системы уравнений
{
matrix::ifend();
^^^^^^^^^^^^^^^
matrix::filling();
}
void matrix::filling() //Заполнение расширенного массива
{
matrix::ifend();
^^^^^^^^^^^^^^^
Можно убрать этот вызов из функции filling
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужен способ проверять первый символ переменной типа std::string на принадлежность к верхнему регистру с учетом правил русского языкаЕсть что-то...
Есть задание: из текста, в котором 2 до 40 слов, в каждом из которых от 1 до 6 строчных латинских букв; между соседними словами – не менее одного...
Есть пример нижеКак сделать так, чтобы при нажатии Tab вставлялся отступ в тексте (абзац) вместо перехода к следующему элементу страницы?
Необходима функция, переводящая в десятичные числа hex буквыA -> 10, F -> 15 и тд