Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
wazler
2 / 2 / 0
Регистрация: 04.12.2011
Сообщений: 119
#1

Чтение памяти не возможно - C++

18.12.2013, 14:52. Просмотров 749. Ответов 5
Метки нет (Все метки)

Начал изучаться ООП получил лабораторную, программа заупускается и на вводе размерности матрицы появляется ошибка. Табличка которая выходит после ввода размерности приложена.
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
#include <iostream>
#include <locale>
using namespace std;
 
 
class Matrix
{
private:
    float **Value;
    int n;
    
public:
    Matrix(int n)//конструктор1
    {
         float **Value = new float*[n];
        for (int i = 0; i < n; i++)
        for (int j = 0; i < n; i++)
        {
            Value[i] = new float[n];
            Value[j] = new float[n];
        }
    }
    ~Matrix() //деструктор1
    {
        for (int i = 0; i < n; i++)
        for (int j = 0; i < n; i++)
        {
            delete[](Value[i]);
            delete[](Value[j]);
        }
        delete[](Value);
    }
    Matrix()//конструктор2
    {
    }
    void Create_Matrix(); // функция заполнения матрицы случайными числами
    void Print_Matrix(); // функция распечатки матрицы
    Matrix operator+(const Matrix &matrix); //оператор сложения матриц (перегрузка операторов)
 
};
 
void Matrix::Create_Matrix() //заполняем матрицу случайными числами
{
    cout << "Введите размерность матрицы: ";
    cin >> n;
    for (int i = 0; i < n; i++) //Цикл по строкам
    for (int j = 0; j < n; j++) //по столбцам
        Value[i][j] = rand() % 10; //Задаем случайные значения от 0 до 10
}
 
void Matrix::Print_Matrix() //Печатаем матрицу
{
    cout << "_____________\n";
    for (int i = 0; i < n; i++) //Цикл по строкам
    {
        for (int j = 0; j < n; j++) //По столбцам
        {
            cout.width(4); //Устанавливаем ширину между выводом текущего значения 
            cout << Value[i][j]; //Выводим текущее значение
        }
        cout << "\n"; //Переносим вывод на новую строчку (для красоты)
    }
    cout << "____________\n";
}
 
Matrix Matrix::operator+ (const Matrix &matrix) //Оператор сложения
{
    Matrix temp(*this); //Создаем матрицу temp
    for (int i = 0; i <n; i++)
    for (int j = 0; j <n; j++)
        temp.Value[i][j] = Value[i][j] + matrix.Value[i][j]; //Запоминаем в матрице temp сумму двух других матриц
    return temp; //Возвращаем матрицу temp
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    Matrix a, b, c; //Объявляем матрицы a,b,c
    a.Create_Matrix(); //Заполняем случайными числами матрицу a
    cout << "Matrix A: " << endl;
    a.Print_Matrix(); //Печатаем
    b.Create_Matrix(); //Заполняем случайными числами матрицу b
    cout << "Matrix B: " << endl;
    b.Print_Matrix(); //Печатаем
    c = a + b; // Складываем матрицы a и b
    cout << "Matrix A+B: " << endl;
    c.Print_Matrix(); //Печатаем матрицу c
    system("pause");
}
делал ШАГ С ОБХОДОМ.
указал на неполадки этой строки
C++
1
        Value[i][j] = rand() % 10; //Задаем случайные значения от 0 до 10
Вот такая задача, помогите разобраться и понять
0
Миниатюры
Чтение памяти не возможно   Чтение памяти не возможно  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2013, 14:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение памяти не возможно (C++):

Возможно ли обращение к статической памяти функции извне? - C++
Здравствуйте! Возможно ли сделать так? Obj* ptr; void F() { static Obj _obj = { }; ptr = &amp;_obj; }

Чтение из памяти - C++
добрый день, нужна помощь у же не знаю что я не так делаю , вернее как мне нужно сделать void foo(char * inputfile, char * outputfile,...

чтение из памяти - C++
господа допустим есть - int a=5; мне нужно получить адрес переменной &quot;а&quot; и из адреса получить значение т.е. - 5 . Как возможно это...

Чтение участка памяти - C++
Ищу, но не могу найти... Дело в том, что мне нужно в массиве выделять блоки по 4 элемента. Все было бы хорошо, если бы массив был бы у меня...

Чтение ячейки памяти - C++
Сказали считать ячейку памяти, в которой лежит целое число, а так же посчитать кол-во 0 и 1. До сих пор не пойму, что от меня требуют и...

Чтение строки из памяти - C++
Пытаюсь обратиться к оперативной памяти и прочитать оттуда строку char fullChar = &quot;&quot;; char tempChar = ' '; ...

5
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
18.12.2013, 15:18 #2
wazler, присмотритесь к циклам в конструкторе и деструкторе. В конструкторе к тому же используется локальная Value.
0
wazler
2 / 2 / 0
Регистрация: 04.12.2011
Сообщений: 119
18.12.2013, 16:05  [ТС] #3
Цитата Сообщение от Tulosba Посмотреть сообщение
wazler, присмотритесь к циклам в конструкторе и деструкторе. В конструкторе к тому же используется локальная Value.
все так же только красное выделение после ошибки исчезла. Можете какой нибудь пример дать?????
С Value я не совсем понял...
0
Alex5
1102 / 763 / 119
Регистрация: 12.04.2010
Сообщений: 1,933
18.12.2013, 17:13 #4
Цитата Сообщение от wazler Посмотреть сообщение
C++
1
2
Matrix a, b, c; //Объявляем матрицы a,b,c
 a.Create_Matrix(); //Заполняем случайными числами матрицу a
Для матриц a, b, c был использован конструктор2 Matrix(). n и Value у них не определены.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
18.12.2013, 17:40 #5
C++
1
2
3
4
5
6
7
8
9
10
Matrix(int n)//конструктор1
    {
         float **Value = new float*[n]; // Value - локальная переменная. Не член класса.
        for (int i = 0; i < n; i++)
        for (int j = 0; i < n; i++)
        {
            Value[i] = new float[n]; // Локальная переменная
            Value[j] = new float[n]; // Локальная переменная
        }
    }
Ну и, как я уже говорил, совершенно нелепый цикл. Более правильный конструктор:
C++
1
2
3
4
5
6
7
8
explicit Matrix(int n)
    {
         Value = new float*[n]; // Value - член-класса. 
        for (int i = 0; i < n; i++)
        {
            Value[i] = new float[n]; 
        }
    }
И конечно, конструктор по умолчанию не должен быть пустым, как уже сказал Alex5.
0
wazler
2 / 2 / 0
Регистрация: 04.12.2011
Сообщений: 119
18.12.2013, 21:12  [ТС] #6
Цитата Сообщение от Tulosba Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
Matrix(int n)//конструктор1
    {
         float **Value = new float*[n]; // Value - локальная переменная. Не член класса.
        for (int i = 0; i < n; i++)
        for (int j = 0; i < n; i++)
        {
            Value[i] = new float[n]; // Локальная переменная
            Value[j] = new float[n]; // Локальная переменная
        }
    }
Ну и, как я уже говорил, совершенно нелепый цикл. Более правильный конструктор:
C++
1
2
3
4
5
6
7
8
explicit Matrix(int n)
    {
         Value = new float*[n]; // Value - член-класса. 
        for (int i = 0; i < n; i++)
        {
            Value[i] = new float[n]; 
        }
    }
И конечно, конструктор по умолчанию не должен быть пустым, как уже сказал Alex5.

так нужно было сделать? если так то у меня все равно указывает на строку
C++
1
Value[i][j] = rand() % 10; //Задаем случайные значения от 0 до 10
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
#include <iostream>
#include <locale>
using namespace std;
 
 
class Matrix
{
private:
    float **Value;
    int n;
    
public:
    explicit Matrix(int n) //конструктор1
    {
        Value = new float*[n]; // Value - член-класса. 
        for (int i = 0; i < n; i++)
        {
            Value[i] = new float[n];
        }
    }
    Matrix()//констурктор2
    {
            Value = new float*[n]; // Value - член-класса. 
            for (int i = 0; i < n; i++)
            {
                Value[i] = new float[n];
            }
        }
    ~Matrix() //деструктор1
    {
        for (int i = 0; i < n; i++)
        {
            delete[](Value[i]);
        }
        delete[](Value);
    }
    void Create_Matrix(); // функция заполнения матрицы случайными числами
    void Print_Matrix(); // функция распечатки матрицы
    Matrix operator+(const Matrix &matrix); //оператор сложения матриц (перегрузка операторов)
 
};
 
void Matrix::Create_Matrix() //заполненяем матрицу случайными числами
{
    cout << "Введите размерность матрицы: ";
    cin >> n;
    for (int i = 0; i < n; i++) //Цикл по строкам
    for (int j = 0; j < n; j++) //по столбцам
        Value[i][j] = rand() % 10; //Задаем случайные значения от 0 до 10
}
 
void Matrix::Print_Matrix() //Печатаем матрицу
{
    cout << "______________\n";
    for (int i = 0; i < n; i++) //Цикл по строкам
    {
        for (int j = 0; j < n; j++) //По столбцам
        {
            cout.width(4); //Устанавливаем ширину между выводом текущего значения 
            cout << Value[i][j]; //Выводим текущее значение
        }
        cout << "\n"; //Переносим вывод на новую строчку (для красоты)
    }
    cout << "_____________\n";
}
 
Matrix Matrix::operator+ (const Matrix &matrix) //Оператор сложения
{
    Matrix temp(*this); //Создаем матрицу temp
    for (int i = 0; i <n; i++)
    for (int j = 0; j <n; j++)
        temp.Value[i][j] = Value[i][j] + matrix.Value[i][j]; //Запоминаем в матрице temp сумму двух других матриц
    return temp; //Возвращаем матрицу temp
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    Matrix a, b, c; //Объявляем матрицы a,b,c
    a.Create_Matrix(); //Заполняем случайными числами матрицу a
    cout << "Matrix A: " << endl;
    a.Print_Matrix(); //Печатаем
    b.Create_Matrix(); //Заполняем случайными числами матрицу b
    cout << "Matrix B: " << endl;
    b.Print_Matrix(); //Печатаем
    c = a + b; // Складываем матрицы a и b
    cout << "Matrix A+B: " << endl;
    c.Print_Matrix(); //Печатаем матрицу c
    system("pause");
}
0
18.12.2013, 21:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2013, 21:12
Привет! Вот еще темы с ответами:

Чтение памяти невозможно - C++
Ребята помогите, не понимаю где ошибка вот весь код #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;map&gt; #include &lt;list&gt; ...

Чтение памяти из процессов - C++
Здравствуйте , знаю c++ на базовом уровне , хочу научится писать читы для CS:GO. Начать хочу с радархака. Посмотрел пару уроков , понял ,...

Чтение архива RAR или ZIP (возможно с предварительно установленным паролем) - C++
Доброго всем времени суток! такая вот задача: создать программу чтения фаилов из архива (ZIP,RAR), установить пароль на архив, пароль...

Возможно ли узнать, существуют ли другие указатели на данную область памяти? - C++
Возможно ли узнать, существуют ли другие указатели на данную область памяти? например: char * pChar = new char; //init ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.