7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
1

Предупреждения компилятора об использовании неинициализированных переменных

18.10.2012, 19:11. Показов 2555. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#define n 5
#define m 5
#define p 5
#define q 5
const int N = 20;
 
int sum(int s, int u);
 
int main(void)
{
int l, r, d;
 
sum(l, r);
d=l+r;
printf("\n\t Summa ravna: \"%d\n", d);
printf("\n Press any key: ");
_getch();
return 0; 
}
 
int sum(int o, int h)
{
int i, j, X[m][n], Y[p][q];
time_t t;
 
srand((unsigned)time(&t));
for (i = 0; i < m; ++i)
        for (j = 0; j < n; ++j)
            X[i][j] = (rand() % N) - N;
 
for (i = 0; i < p; ++i)
        for (j = 0; j < q; ++j)
            Y[i][j] = (rand() % N) - N;
 
for (i = 0; i < m; ++i)
        for (j = 0; j < n; ++j)
            if (X[i][j]<0) o=o+X[i][j];
 
for (i = 0; i < p; ++i)
        for (j = 0; j < q; ++j)
            if (Y[i][j]<0) h=h+Y[i][j];
return o, h;
 
}
Всем привет. При построении выдает:
1.cpp(17) : warning C4700: использована неинициализированная локальная переменная "h"
1.cpp(17) : warning C4700: использована неинициализированная локальная переменная "o"
Не пойму как их инициализировать..
Прошу помощи, если можно с объяснением моей ошибки)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2012, 19:11
Ответы с готовыми решениями:

Использование неинициализированных переменных
Есть простой код //g++ 5.4.0 #include &lt;iostream&gt; int main() { int n; std::cout...

Ошибка компилятора при использовании regex
Когда пытаюсь запустить код с использованием regex, то в dev c++ 5.4.2 открывается новая вкладка со...

Ограничение для неинициализированных переменных?
Здравствуйте, уважаемый форумчане. Интересует вопрос: Какие ограничения применяются к...

Предупреждения компилятора config/prolog
при компиляции проекта выходят предупреждения на файлы config/_prolog.h stl/_prolog.h...

19
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
18.10.2012, 19:17 2
Цитата Сообщение от AzgardC Посмотреть сообщение
return o, h;
во первых строках письма как это ты решил вернуть две переменных в один int
Цитата Сообщение от AzgardC Посмотреть сообщение
int sum(int o, int h)
во вторых чего ты пытался сделать в своей функции ужель ты пытаешься вернуть из неё те же параметры которые отдавал в функцию
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
18.10.2012, 19:35  [ТС] 3
То есть мне использовать два return??
А что мне надо тогда возращать чтобы передать значения o и h в main?
0
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
18.10.2012, 19:43 4
Цитата Сообщение от AzgardC Посмотреть сообщение
То есть мне использовать два return??
А что мне надо тогда возращать чтобы передать значения o и h в main?
два return использовать нельзя. Возвращяй o, а на h передавай ссылку, или наоборот.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
18.10.2012, 19:54 5
Цитата Сообщение от AzgardC Посмотреть сообщение
То есть мне использовать два return??
классный вывод
return означает дословно возврат(возвращаться)
как думаешь можно два раза вернутся из функции

Добавлено через 2 минуты
Цитата Сообщение от SeregaC++ Посмотреть сообщение
Возвращяй o, а на h передавай ссылку, или наоборот.
а зачем
вот его код
Цитата Сообщение от AzgardC Посмотреть сообщение
int sum(int o, int h)
...........................
Цитата Сообщение от AzgardC Посмотреть сообщение
return o, h;
т.е что послали то и вернули
я даже не могу понять что он своей функцией пытался выразить
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
18.10.2012, 20:03  [ТС] 6
Цитата Сообщение от ValeryS Посмотреть сообщение
я даже не могу понять что он своей функцией пытался выразить
Дело такое=): в sum нахожу сумму отрицательных элементов матрицы, в main распечатываю результат или складываю и распечатываю))

Добавлено через 1 минуту
то есть return не нужен?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2012, 20:15 7
Цитата Сообщение от AzgardC Посмотреть сообщение
Не пойму как их инициализировать..
Хотя бы так:
C++
1
int l = 0, r = 0, d = 0;
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
18.10.2012, 20:21  [ТС] 8
Цитата Сообщение от alsav22 Посмотреть сообщение
Хотя бы так:
C++
1
int l = 0, r = 0, d = 0;
А разве когда я обращаюсь к sum, переменным l и r не присваиваются значения o и h?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
18.10.2012, 20:23 9
Цитата Сообщение от AzgardC Посмотреть сообщение
Дело такое=): в sum нахожу сумму отрицательных элементов матрицы,
где ты их находишь?
Цитата Сообщение от AzgardC Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
srand((unsigned)time(&t));
for (i = 0; i < m; ++i)
 for (j = 0; j < n; ++j)
 X[i][j] = (rand() % N) - N;[url]https://www.cyberforum.ru/about-forum/thread103521.html[/url]
for (i = 0; i < p; ++i)
 for (j = 0; j < q; ++j)
 Y[i][j] = (rand() % N) - N;
for (i = 0; i < m; ++i)
 for (j = 0; j < n; ++j)
 if (X[i][j]<0) o=o+X[i][j];
for (i = 0; i < p; ++i)
 for (j = 0; j < q; ++j)
 if (Y[i][j]<0) h=h+Y[i][j];
ты все пытаешься сделать в функции и инициализировать два массива и вычислить сумму в двух массивах
зачем тебе main?
задачу опиши сначала словами, потом подумай как бы ты сделал,если бы не было компьютера и только потом кодируй но никак не наоборот
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
18.10.2012, 20:29  [ТС] 10
Создать программу, использующую подпрограмму-функцию. Функция должна возвращать сумму элементов с заданными свойствами в массивах или матрицах:
Суммы отрицательных элементов матриц X(m,n) и Y(p,q). Для матрицы.

Добавлено через 13 секунд
Вот=)

Ну я и решил все рассчитать в sum, a в main результат распечатать)
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2012, 20:31 11
Цитата Сообщение от AzgardC Посмотреть сообщение
А разве когда я обращаюсь к sum, переменным l и r не присваиваются значения o и h?
И чему равны значения o и h? Всё наоборот. Создаются две локальные переменные o и h, и им присваиваются значения (которых нет) l и r.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
18.10.2012, 20:32 12
Цитата Сообщение от AzgardC Посмотреть сообщение
использующую подпрограмму-функцию.
это значит что ды должен создать функцию в которую передаешь адрес массива и она должна вернуть тебе
Цитата Сообщение от AzgardC Посмотреть сообщение
сумму элементов с заданными свойствами
и потом вызвать её два раз для первого массива и для второго, а не пихать весь код в функцию
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
18.10.2012, 21:06  [ТС] 13
Народ, помогите! Не знаю как сделать все нормально!=)

Добавлено через 11 минут
ValeryS , спасибо за пояснение, пойду думать.
П.С. Как тут удалить свое сообщение?=)
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
22.10.2012, 20:16  [ТС] 14
Всем привет! Это продолжение этой темыПредупреждения компилятора об использовании неинициализированных переменных . Я все сделал по последнему совету так:
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
[CPP]#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#define n 5
 
 
int** fun(int **first, int **second, int result, int z); 
int main(void)
{
int **X, **Y, d, **g;
    int i,j, size = n;
    time_t t;
        
    X= (int**)malloc((size*size));
    Y= (int**)malloc((size*size));
 
    for(i=0; i<size; i++)
     {
                   X[i]= (int*)malloc((size*size)); 
                   Y[i]= (int*)malloc((size*size));
     }
 
srand((unsigned)time(&t));
for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            X[i][j] = -20*rand()/RAND_MAX +10;
srand((unsigned)time(&t)); 
for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            Y[i][j] = -20*rand()/RAND_MAX +10;
g=fun(X,Y,d,size);
printf("\n\t Summa ravna: \"%d\n", &g);
printf("\n Press any key: ");
_getch();
return 0; 
}
 
int** fun(int **first, int **second, int result, int z)
{
int i, j, o=0, h=0;
 
for (i = 0; i < z; ++i)
        for (j = 0; j < z; ++j)
            if (first[i][j]<0) o=o+first[i][j];
 
for (i = 0; i < z; ++i)
        for (j = 0; j < z; ++j)
            if (second[i][j]<0) h=h+second[i][j];
result=o+h;
return result;
 
}
[/CPP]

и выдается такая ошибка:
1.cpp(51): error C2440: return: невозможно преобразовать "int" в "int **"
Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции

А задача звучит так:
Создать программу, использующую подпрограмму-функцию. Функция должна возвращать сумму элементов с заданными свойствами в массивах или матрицах:
Суммы отрицательных элементов матриц X(m,n) и Y(p,q). Для матрицы.

Пожалуйста объясните в чем ошибка и как исправить!
0
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
22.10.2012, 20:23 15
Изменить тип возвращаемого значения функции fun с int** на int
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
22.10.2012, 20:31  [ТС] 16
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Изменить тип возвращаемого значения функции fun с int** на int
Теперь получилось вот что: Run-Time Check Failure #3 - The variable 'd' is being used without being initialized.
0
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
22.10.2012, 20:35 17
Вы используете d без инициализации. И вообще d и в функции fun result не нужен.
Убрать d и result, в fun вместо
C
1
2
result=o+h;
return result;
C
1
return o+h;
И еще в 32 строчке & не нужен.
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
22.10.2012, 20:51  [ТС] 18
Спасибо большое! Все работает!
P.S. Как закрыть тему?)

Добавлено через 3 минуты
Ааа, стоп, а как вернуть из функции несколько значений?

Добавлено через 5 минут
Мне просто надо вернуть поочереди o и h
0
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
22.10.2012, 21:04 19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int fun(int **first, int **second, int z, int* o, int* h)
{
int i, j;
*o = 0;
*h = 0;
for (i = 0; i < z; ++i)
        for (j = 0; j < z; ++j)
            if (first[i][j]<0) *o += first[i][j];
 
for (i = 0; i < z; ++i)
        for (j = 0; j < z; ++j)
            if (second[i][j]<0) *h += second[i][j];
return *o + *h;
}
И вызывать:
C++
1
2
int o, h;
g = fun(X, Y, size, &o, &h);
0
7 / 7 / 1
Регистрация: 18.10.2012
Сообщений: 93
22.10.2012, 21:14  [ТС] 20
Спасибо, я сделал то же самое только сделал return 0;
Еще раз спасибо!
0
22.10.2012, 21:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2012, 21:14
Помогаю со студенческими работами здесь

Ошибка компилятора gcc при использовании библиотека SDL в C
Здравствуйте. Программа Putpixel, которая строит три вложенных окружности разного цвета: #include...

Особенности компилятора от Microsoft: объявление переменных
Здравствуйте. Есть такой код: #include &lt;Windows.h&gt; int WINAPI WinMain(HINSTANCE hInstance,...

Отношение happens-before при использовании volatile переменных
после изменения volatile переменной в ядре в оперативку сбрасывается только значение ...

Построение графика при использовании 8-ми наборов переменных
Здравствуйте, опять проблема при построении графика. Есть функция которая задается четырьмя...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru