Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Зашифровать/расшифровать сообщение по указанному правилу Как реализовать на Си? Зашифруйте/расшифруйте сообщение Метод шифровки: в начале печатается последний символ потом первый затем предпоследний, а потом второй и т.д. https://www.cyberforum.ru/ cpp-beginners/ thread2378650.html Подсчитать количество строк файла, в которых есть слова равной максимальной длины C++
дан символьный файл f. подсчитать количество строк в которых есть слова максимальной длины. Результат с соответствующим комментарием записать в первую стройку файла f. Заранее благодарю.
C++ Реализовать "падающие" буквы начиная с конца строки https://www.cyberforum.ru/ cpp-beginners/ thread2378647.html
Как реализовать? Написать программу со следующим сценарием: пользователь вводит строку, нажимает Enter и далее варианты: Буквы падают с конца строки.
C++ В строке символов изменить на обратный порядок следования цепочек , составленных из малых русских букв Как реализовать? В указанной строке символов изменить на обратный порядок следования цепочек , составленных из малых русских букв. Например строка ' дым123як #1ферзь$'; должна... https://www.cyberforum.ru/ cpp-beginners/ thread2378644.html
C++ Строки, решение задание стандартными функциями
Задание: В строке имеются лишние проблемы Нужно преобразовать ее так, чтобы между словами был ровно один пробел. Подскажите, с помощью какие стандартных функций строк можно решить эту задачу? На...
C++ Работа с ассоциативными массивами https://www.cyberforum.ru/ cpp-beginners/ thread2378621.html
Всем привет. Можете объяснить на примере, как работает ассоциативный массив? Задача для примера такая, получаем строку символов. В строке цифры и буквы латинского алфавита. Необходимо занести их в...
C++ Напечатать индексы всех равных элементов матрицы Напечатайте индексы всех равных элементов произвольного массива А(N;N). https://www.cyberforum.ru/ cpp-beginners/ thread2378616.html Переставить строки и столбцы квадратной матрица А, чтобы алгебраические суммы произведений элементов C++
Так переставить строки и столбцы квадратной матрица А, чтобы алгебраические суммы произведений элементов i-го столбца и i-й строки (знак суммы, сверху n, снизу j = 1) a(ij)*a(ji) убывали при...
C++ Найти корни нелинейного уравнения Задание: Реализуйте алгоритмы методов нахождения корней нелинейного уравнения заданного согласно варианту и вычислите все его корни в заданном диапазоне. Входными данными являются: ... https://www.cyberforum.ru/ cpp-beginners/ thread2378594.html C++ Вывод определенного количества символов заданной строки текста в обратной последовательнгости Есть примерный код: int main() { setlocale(LC_ALL, "Russian"); cout << "Введите строку" << endl; std::string str; getline(cin, str); int n = 0; cout << "Сколько символов (слева)... https://www.cyberforum.ru/ cpp-beginners/ thread2378592.html
Объясните пожалуйста эту форумулу C++
Добрый день, Кто нибудь может пожалуйста объяснить эту формулу и как составить алгоритм? Эта нетрудная задача для 1-курсников, я пытался но не получается писать правильный код для этой задачи....
C++ Найти максимальный и минимальный элементы матрицы В сгенерированном или или введённом с консоли двухмерном массиве размера M на N, где M и N вводятся с клавиатуры, найти максимальный и минимальный элементы, вывести их местонахождение. Посчитать... https://www.cyberforum.ru/ cpp-beginners/ thread2378578.html
Мозгоправ
1729 / 1023 / 468
Регистрация: 01.10.2018
Сообщений: 2,136
Записей в блоге: 2
27.12.2018, 00:35 0

Потенциально неинициализированная локальная переменная-указатель (Ошибка C4703) - Как исправить? - C++ - Ответ 13197066

27.12.2018, 00:35. Показов 2663. Ответов 7
Метки (Все метки)

Ответ

В общем, я предполагал такой разворот событий. И я вам прозрачно намекал, что лучше было бы оформить кнутовскую матрицу в виде класса. Вы оставили это "на потом", и тут же завязли в деталях реализации этой самой матрицы.
А всего-то надо было написать 70 строк кода.
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <ctime>
#include <fstream>
#include <vector>
#include <algorithm>
#include <stdexcept>
 
using namespace std;
 
// ----- KnuthMatrix ----------------------------------------------------------
 
template <typename T>
class KnuthMatrix {
    struct Item {
        size_t row, col;
        T val;
        Item(size_t r, size_t c, const T &v) : row(r), col(c), val(v) {}
    };
    class ItemComparator {
        size_t row, col;
    public:
        ItemComparator(size_t r, size_t c) : row(r), col(c) {}
        bool operator () (const Item &a) {
            return row == a.row && col == a.col;
        }
    };
    typedef vector<Item> KVec;
public:
    KnuthMatrix() : orig_rows(0), orig_cols(0) {}
    KnuthMatrix(size_t rows, size_t cols) {
        resize(rows, cols);
    }
    KnuthMatrix(const KnuthMatrix &km) {
        kvec = km.kvec;
        orig_rows = km.orig_rows;
        orig_cols = km.orig_cols;
    }
    KnuthMatrix& operator = (const KnuthMatrix &km) {
        kvec = km.kvec;
        orig_rows = km.orig_rows;
        orig_cols = km.orig_cols;
        return *this;
    }
    T get(size_t row, size_t col) const {
        if (row >= orig_rows || col >= orig_cols)
            throw range_error("KnuthMatrix: invalid index");
        auto it = find_if(kvec.begin(), kvec.end(), ItemComparator(row, col));
        if (it == kvec.end())
            return T(0);
        return it->val;
    }
    void set(size_t row, size_t col, const T &v) {
        if (row >= orig_rows || col >= orig_cols)
            throw range_error("KnuthMatrix: invalid index");
        if (v == T(0))
            return;
        auto it = find_if(kvec.begin(), kvec.end(), ItemComparator(row, col));
        if (it == kvec.end())
            kvec.emplace_back(row, col, v);
        else
            it->val = v;
    }
    void clear() {
        kvec.clear();
    }
    bool isEmpty() const {
        return kvec.empty();
    }
    size_t size() const {
        return kvec.size();
    }
    size_t rows() const { return orig_rows; }
    size_t cols() const { return orig_cols; }
    void resize(size_t rows, size_t cols) {
        orig_rows = rows;
        orig_cols = cols;
        clear();
    }
    void dump(ostream &os) const {
        os <<
            "Оригинальная матрица содержит:\n"
            "    строк:               " << setw(4) << orig_rows << "\n"
            "    столбцов:            " << setw(4) << orig_cols << "\n"
            "    всего элементов:     " << setw(4) << orig_rows * orig_cols << "\n"
            "    ненулевых элементов: " << setw(4) << size() << "\n"
            "\n";
        os <<
            "+---------+---------+--------------+\n"
            "|  Строка | Столбец |     Значение |\n"
            "+---------+---------+--------------+\n";
        for (const auto &i : kvec)
            os << setw(10) << i.row << setw(10) << i.col << setw(14) << i.val << endl;
        os << endl;
    }
protected:
    size_t orig_rows, orig_cols;
    KVec kvec;
};
 
// ----------------------------------------------------------------------------
 
bool menuInput(KnuthMatrix<int> &km) {
    ifstream Matrix("RazMatr.txt");
    if (!Matrix.is_open())
        return false;
 
    size_t size;
    int number;
 
    Matrix >> size;
    km.resize(size, size);      // квадратная матрица
 
    for (size_t i = 0; i < size; i++)
        for (size_t j = 0; j < size; j++) {
            if ((Matrix >> number).bad()) {
                // ошибка чтения ((
                Matrix.close();
                km.resize(0, 0);
                return false;
            }
            km.set(i, j, number);
        }
    Matrix.close();
    return true;
}
 
void menuPrint(const KnuthMatrix<int> &km) {
    for (size_t i = 0; i < km.rows(); ++i) {
        for (size_t j = 0; j < km.cols(); ++j)
            cout << setw(4) << km.get(i, j);
        cout << endl;
    }
}
 
void menuElement(const KnuthMatrix<int> &km) {
    size_t i = 0, j = 0;
    bool illegal_input;
    cout << " Ввод данных:" << endl;
    do {
        illegal_input = false;
        cout << "  Введите номер строки: "; cin >> i;
        if (i >= km.rows()) {
            cout << "\n  Такой строки нет в массиве! Попробуйте ещё раз." << endl;
            illegal_input = true;
        }
    } while (illegal_input);
 
    do {
        illegal_input = false;
        cout << "  Введите номер столбца: "; cin >> j;
        if (j >= km.cols()) {
            cout << "\n  Такого столбца нет в массиве! Попробуйте ещё раз." << endl;
            illegal_input = true;
        }
    } while (illegal_input);
 
    cout << endl << " Значение элемента, хранящиегося по адресу [" << i << "][" << j << "]: " << km.get(i, j) << endl;
}
 
void menuMaxInColumn(const KnuthMatrix<int> &km) {
    size_t i = 0, j = 0;
    bool illegal_input;
    cout << " Ввод данных:" << endl;
    do {
        illegal_input = false;
        cout << "  Введите номер столбца: "; cin >> j;
        if (j >= km.cols()) {
            cout << "\n  Такого столбца нет в массиве! Попробуйте ещё раз." << endl;
            illegal_input = true;
        }
    } while (illegal_input);
 
 
    int max_value = km.get(0, j);
    for (size_t i = 1; i < km.rows(); ++i) {
        if (km.get(i, j) > max_value)
            max_value = km.get(i, j);
    }
    cout << " Максимальное значение в столбце: " << max_value << endl;
}
 
const char noKnuth[] = "\n Массив по схеме Кнута не создан!\n";
 
int main() {
    setlocale(LC_ALL, "rus");
 
    KnuthMatrix<int> km;
 
    short int change = 1;
    do {
        cout <<
            "\n--------------------------------------------------\n"
            " Меню:\n"
            "  1 - Ввод разреженного массива из файла;\n"
            "  2 - Вывод массива по схеме Кнута на экран;\n"
            "  3 - Вывод полной матрицы на экран;\n"
            "  4 - Получение значения элемента по номеру строки и номеру столбца;\n"
            "  5 - Определение максимального значения среди ненулевых элементов в указанном столбце;\n"
            "  0 - Выход из программы.\n"
            "--------------------------------------------------\n"
            " Ввод: ";
        cin >> change;
        cout << endl;
        switch (change) {
        case 1:                                                  //Ввод массива по схеме Кнута из файла
            if (menuInput(km)) {
                cout << 
                    "\n Ввод массива по схеме Кнута окончен успешно!\n"
                    " Размер массива по схеме Кнута: " << km.size() << " элементов" << endl;
            }
            else {
                change = 0;
                cout << " Не удалось ввести массив!" << endl;
            }
            break;
        case 2:                                                  //Вывод массива по схеме Кнута на экран
            if (km.isEmpty())
                cout << noKnuth << endl;
            else
                km.dump(cout);
            break;
        case 3:                                                  //Вывод полной матрицы на экран
            if (km.isEmpty())
                cout << noKnuth << endl;
            else
                menuPrint(km);
            break;
        case 4:                                                  //Получение значения элемента по номеру строки и номеру столбца
            if (km.isEmpty())
                cout << noKnuth << endl;
            else
                menuElement(km);
            break;
        case 5:                                                  //Определение максимального значения среди ненулевых элементов в указанном столбце
            if (km.isEmpty())
                cout << noKnuth << endl;
            else
                menuMaxInColumn(km);
            break;
        case 0:                                                  //Выход из программы
            break;
        default:
            cout << "\n Неверный выбор! Попробуйте ещё раз!";
            break;
        }
    } while (change != 0);
    cout << "\n Время работы программы = " << clock() / 1000.0 << " сек.\n";  //вывод времени работы программы
    system("pause");
    return 0;
}
Реализация разреженной матрицы по схеме Кнута не идеальная, но в учебных целях вполне потянет.
Шаблон сделан только с целью (потенциальной) использовать этот же код для других числовых типов.
И функцию main() я растащил на отдельные функции - мне так было проще ориентироваться в исходнике.
Если вы положете файл RazMatr.txt рядом с исходниками программы, то не придётся хардкодить такой длинный абсолютный путь к файлу данных.

Добавлено через 20 минут
PS. И слова "симестр" в русском языке нибывает ((

Вернуться к обсуждению:
Потенциально неинициализированная локальная переменная-указатель (Ошибка C4703) - Как исправить? C++
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2018, 00:35
Готовые ответы и решения:

Исправить ошибку: "C4703: используется потенциально неинициализированная локальная переменная-указатель"
Вообщем выдает одну ошибку в функции добавления в 76 строке, а именно &quot;Ошибка 1 error C4703:...

Error C4703: используется потенциально неинициализированная локальная переменная-указатель
// prog8.cpp: определяет точку входа для консольного приложения. #include &lt;stdio.h&gt; #include...

Ошибка C4703 используется потенциально неинициализированная локальная переменная-указатель "A"
Помогите не могу понять, что не так то, уже многое перепробовал #include &quot;stdafx.h&quot; #include...

Error C4703: используется потенциально неинициализированная локальная переменная-указатель "pel"
#include &quot;vector.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;locale.h&gt; int main() {...

7
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2018, 00:35

Выдает ошибку C4703: используется потенциально неинициализированная локальная переменная-указатель "a"
Выдает ошибку C4703: используется потенциально неинициализированная локальная переменная-указатель...

Используется потенциально неинициализированная локальная переменная-указатель
// ex4.cpp: определяет точку входа для консольного приложения. // ...

Ошибка: Используется потенциально неинициализированная локальная переменная
Ошибка: Используется потенциально неинициализированная локальная переменная prev - 48 строчка,...

"Используется потенциально неинициализированная локальная переменная - указатель"
Доброго времени суток! Возникла проблема в программе, на 68 строке пишет, что &quot;используется...

Использована неинициализированная локальная переменная. Не пойму, как исправить
У меня есть структура typedef struct { char *processor, *plata; float chastota; int...

Неинициализированная локальная переменная - исправить ошибку
не могу устранить ошибку &quot;использована неинициализированная локальная переменная a&quot; #include...

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