Ошибка 1 error c4700 использована неинициализированная локальная переменная

I have a question related to my C/C++ code. I tried some researches but there was no specific answer for my problem. I hope you will response to my question as soon as possible.

Here is my full code in C language:

 #include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define M 500
#define N 500
int
main ()
{
  //set number of threads here
  //omp_set_num_threads(8);
  int i, j, k;
  double sum;
  double **A, **B, **C;

  A = malloc (M * sizeof (double *));
  B = malloc (M * sizeof (double *));
  C = malloc (M * sizeof (double *));
  for (i = 0; i < M; i++)
    {
      A[i] = malloc (N * sizeof (double));
      B[i] = malloc (N * sizeof (double));
      C[i] = malloc (N * sizeof (double));
    }
  double start, end;
  for (i = 0; i < M; i++)
    {
      for (j = 0; j < N; j++)
        {
          A[i][j] = j * 1;
          B[i][j] = i * j + 2;
          C[i][j] = j - i * 2;
        }
    }
  start = omp_get_wtime ();
  for (i = 0; i < M; i++)
    {
      for (j = 0; j < N; j++)
        {
          sum = 0;
          for (k = 0; k < M; k++)
            {

              sum += A[i][k] * B[k][j];
            }
          C[i][j] = sum;
        }
    }

  end = omp_get_wtime ();
  printf ("Time of computation: %f\n", end - start);

  cin.get ();
  return 0;
}

The code terminates because of some bugs.
The result of the code is given here:

error C4700: uninitialized local variable 'A' used

error C4700: uninitialized local variable 'B' used

error C4700: uninitialized local variable 'C' used

Please consider my question :)

Best Regards.

Hristo Iliev's user avatar

Hristo Iliev

72.7k12 gold badges137 silver badges188 bronze badges

asked Jan 11, 2015 at 15:33

loren's user avatar

8

malloc() returns a void pointer, you have to cast it:

  A = (double**) malloc (M * sizeof (double *));
  B = (double**) malloc (M * sizeof (double *));
  C = (double**) malloc (M * sizeof (double *));
  for (i = 0; i < M; i++)
    {
      A[i] = (double*) malloc (N * sizeof (double));
      B[i] = (double*) malloc (N * sizeof (double));
      C[i] = (double*) malloc (N * sizeof (double));
    }

if you are using c++ maybe is better to use «new» instead of malloc:

  A = new double* [M];
  B = new double* [M];
  C = new double* [M];
  for (i = 0; i < M; i++)
    {
      A[i] = new double[N];
      B[i] = new double[N];
      C[i] = new double[N];
    }

answered Jan 11, 2015 at 21:11

Francesco Gatti's user avatar

1

Ilya-Glushko

0 / 0 / 0

Регистрация: 21.01.2018

Сообщений: 11

1

21.01.2018, 15:11. Показов 23533. Ответов 19

Метки калькулятор систем счисления (Все метки)


Студворк — интернет-сервис помощи студентам

При компиляции выдаёт вот такие ошибки:
error C4700: использована неинициализированная локальная переменная «y»
error C4700: использована неинициализированная локальная переменная «x»

P.S Пробовал переставлять объявления и менял их, не помогает.

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
#include <iostream>
#include <stdlib.h>
#include <iomanip>
using namespace std;
 
int main()
{
 
    setlocale(0, "");
    double num;
    cout << "Введите число 1 - умножение, 2 - деление. ";
    cin >> num;
    if (num = 1)
    {int a, b;
 
    cout << "Введите первое число: ";
    cin >> a;
    cout << "Введите второе число: ";
    cin >> b;
    int c = a * b;
    cout << "Результат = " << c << endl; 
    }
 
 
    else if (num = 2)
    setlocale(0, "");
    
    cout << "Введите число 2 - деление ";
    cin >> num;
    int x, y;
        int c = y / x;
    if (num = 2)
 
            
    cout << "Введите первое число: ";
    cin >> x;
    cout << "Введите второе число: ";
    cin >> y;
    cout << "Результат = " << c << endl;
    }



0



139 / 67 / 46

Регистрация: 15.10.2015

Сообщений: 308

21.01.2018, 15:21

2

Инициализируйте X и Y нулями.



0



3959 / 2870 / 668

Регистрация: 08.06.2007

Сообщений: 9,684

Записей в блоге: 4

21.01.2018, 15:23

3

Лучший ответ Сообщение было отмечено Ilya-Glushko как решение

Решение

Переставить строку 31 и поставить ее после 38-й.

Добавлено через 1 минуту

Цитата
Сообщение от Reavolt
Посмотреть сообщение

Инициализируйте X и Y нулями.

Это приведет к делению на нуль в строке 38.



1



139 / 67 / 46

Регистрация: 15.10.2015

Сообщений: 308

21.01.2018, 15:25

4

Цитата
Сообщение от palva
Посмотреть сообщение

Это приведет к делению на нуль в строке 38.

Ему не кто не запрещает инициализировать их 1. Я не читал код, так-как из самой ошибки понятно, в чем проблема.



1



pain1262

6 / 6 / 7

Регистрация: 24.09.2016

Сообщений: 63

21.01.2018, 15:35

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
#include <iostream>
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "RUS");
    int num = 0, a = 0, b = 0;
    double c = 0;
    cout << "Введите число 1 - умножение, 2 - деление. "; cin >> num;
    if (num == 1)
    {
        cout << "Введите первое число: "; cin >> a;
        cout << "Введите второе число: "; cin >> b;
        c = a * b;
        cout << "Результат = " << c << endl;
    }
    if (num == 2)
    {
        cout << "Введите первое число: "; cin >> a;
        cout << "Введите второе число: "; cin >> b;
        c = a / b;
        cout << "Результат = " << c << endl;
    }
}



0



0 / 0 / 0

Регистрация: 21.01.2018

Сообщений: 11

21.01.2018, 15:42

 [ТС]

6

Спасибо, помогло.

Добавлено через 3 минуты
С помощью этого не произойдет деление.



0



7428 / 5022 / 2891

Регистрация: 18.12.2017

Сообщений: 15,694

21.01.2018, 16:11

7

Ilya-Glushko, сбросьте условие задачи



0



0 / 0 / 0

Регистрация: 21.01.2018

Сообщений: 11

21.01.2018, 16:15

 [ТС]

8

Yetty, задачи поставленно небыло, я просто хотел сделать калькулятор с выбором умножения и деления, щас дорабатывать буду, кстати у меня ещё одна проблема…



0



7428 / 5022 / 2891

Регистрация: 18.12.2017

Сообщений: 15,694

21.01.2018, 16:20

9

Ilya-Glushko, дело не в инициализации (она вообще не нужна если не переназначать переменные), а в обработке возможной попытки деления на нуль.



0



0 / 0 / 0

Регистрация: 21.01.2018

Сообщений: 11

21.01.2018, 16:40

 [ТС]

10

Yetty, Что вы предлагаете? Можете конкретно показать? Сразу оговорюсь если я использую std::, не запускается, так что не делайте на это расчет.

З.Ы Visual Studio 2017

Добавлено через 36 секунд
palva, да, помогло…



0



Yetty

7428 / 5022 / 2891

Регистрация: 18.12.2017

Сообщений: 15,694

21.01.2018, 16:41

11

Цитата
Сообщение от Ilya-Glushko
Посмотреть сообщение

Yetty, Что вы предлагаете? Можете конкретно показать?

примерно так:

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
#include <iostream>
using namespace std;
 
int main()
{    
    int n=1, num;
    double a, b, eps=0.0000000001;
        while (n==1)
{
        cout << "a="; cin >> a;
        cout << "b="; cin >> b;
        do
    {  
        cout << "1x or 2: "; cin >> num;
        if (num!=1 && num!=2) cout <<"Enter error/Repeat please.";
    }
    while (num!=1 && num!=2);
    if (num == 1) cout <<"c="<<a * b;
    if (num == 2 && (b<-eps || b>eps)) cout <<"c="<<a / b;
    if (num == 2 && b>-eps&& b<eps) cout <<"Error division by zero";
   cout <<"\nContinue? (1 - YES) "; cin >>n;
}       
    system("pause");
    return 0;
}

переменную с не использовал (только вывод результата) — если она нужна сообщите



1



0 / 0 / 0

Регистрация: 21.01.2018

Сообщений: 11

21.01.2018, 16:42

 [ТС]

12

Yetty, Спасибо, завтра попробую с этим. Сейчас времени уже нету) Если что, обращусь к вам.



0



139 / 67 / 46

Регистрация: 15.10.2015

Сообщений: 308

21.01.2018, 16:43

13

Цитата
Сообщение от Ilya-Glushko
Посмотреть сообщение

если я использую std::, не запускается

Это еще что за магия?



0



Ilya-Glushko

0 / 0 / 0

Регистрация: 21.01.2018

Сообщений: 11

21.01.2018, 16:43

 [ТС]

14

Reavolt,

C++
1
using namespace std;



0



139 / 67 / 46

Регистрация: 15.10.2015

Сообщений: 308

21.01.2018, 16:44

15

Ilya-Glushko, Я имел в виду то, как программа может не работать с указыванием пространства имён?



0



0 / 0 / 0

Регистрация: 21.01.2018

Сообщений: 11

21.01.2018, 16:46

 [ТС]

16

Reavolt, Сам задаюсь этим вопрос, штука в том, что при отсутсвии «using namespace std;» не запускается, а при присутствии и указании «std::» тоже выдает ошибку, даже на примерах из обучения.



0



139 / 67 / 46

Регистрация: 15.10.2015

Сообщений: 308

21.01.2018, 16:48

17

Ilya-Glushko, Если вы указываете пространство имен напрямую std::cout… то вам вообще не нужен using namespace std;



0



0 / 0 / 0

Регистрация: 21.01.2018

Сообщений: 11

21.01.2018, 16:50

 [ТС]

18

Reavolt, Указыва и убирать using namespace std; пробовал, одно и тоже.



0



7428 / 5022 / 2891

Регистрация: 18.12.2017

Сообщений: 15,694

21.01.2018, 17:25

19

Ilya-Glushko, самостоятельно добавьте в калькулятор возможность сложения, вычитания и возведения в степень (включив в программу дополнительную библиотеку #include <cmath>)



1



0 / 0 / 0

Регистрация: 21.01.2018

Сообщений: 11

21.01.2018, 17:31

 [ТС]

20

Yetty, спасибо, попробую!



0



Здравствуйте. Я совсем новичок в программировании, никакого опыта не было.
В общем компилятор показывает ошибку «error C4700: использована неинициализированная локальная переменная «a» и также «b».
Не могу понять, что нужно сделать, укажите пожалуйста на ошибку.

#include "stdafx.h"
#include &lt;iostream&gt;
using namespace std;

int main()
{	


	double a, b, sum, raz, umn, del;
	sum = a + b;
	raz = a - b;
	umn = a*b;
	del = a / b;

	cout &lt;&lt; "vvedite dannie \n";
	cin &gt;&gt; a, b;
	if (a + b)
		cout &lt;&lt; sum &lt;&lt; "\n";
	else
	if (a - b)
		cout &lt;&lt; raz &lt;&lt; "\n";
	else
	if (a*b)
		cout &lt;&lt; umn &lt;&lt; "\n";
	else
	if (a / b)
		cout &lt;&lt; del &lt;&lt; "\n";
	else
		cout &lt;&lt; "hernyu ne nesi, dyatel. \n";
	system("pause");
	return 0;

		
}


  • Вопрос задан

  • 25061 просмотр

Вы складываете a и b, не присвоив им значений. В C/C++ в этом случае в переменных может оказаться произвольный мусор. Нужно писать double a = 0; double b = 0;

Дело в том, что ты выполняешь операции над переменными, которым не присвоено значение. Инициализируй их, например нулями


double a =0.0;
double b=0.0;
double sum, raz, umn, del;

double a, b, sum, raz, umn, del;
    sum = a + b;
    raz = a - b;
    umn = a*b;
    del = a / b;

Ты сразу суммируешь и делаешь прочие операции с переменными, которым не присвоено никакое значение. Перенеси все операции после cin и предупреждение пропадает.

А сразу походу система закрытия тегов отработала

Пригласить эксперта

Т.к. на вопрос уже ответили — разрешите пошутить старую шутку:

Подходит 2-х дневный программист к senior'у и показывает неработающую программу: 
- Подскажите, пожалуйста, где у меня ошибка? 
- В ДНК, - вздыхает senior. 

(без обид, just for fun)

#include <iostream>
using namespace std;

int main()
{	


    double a, b, sum, raz, umn, del;

	cout << "vvedite dannie \n";
    cin >> a;
	cin >> b;

    sum = a + b;
    raz = a - b;
    umn = a*b;
    del = a / b;

    
    if (a + b)
        cout << sum << "\n";
    else
    if (a - b)
        cout << raz << "\n";
    else
    if (a*b)
        cout << umn << "\n";
    else
    if (a / b)
        cout << del << "\n";
    else
        cout << "hernyu ne nesi, dyatel. \n";
    system("pause");
    return 0;

        
}</iostream>

как вариант

Ещё неплохо бы добавить проверку на то чтобы b было не равно 0.
А то деление на ноль и всё такое. Ошибка может выскочить.


  • Показать ещё
    Загружается…

22 сент. 2023, в 10:33

30000 руб./за проект

22 сент. 2023, в 10:14

800 руб./в час

22 сент. 2023, в 10:08

2000 руб./за проект

Минуточку внимания

Суть вопроса такова: я создаю структуру, и объявляю указатель на переменную этого типа. Далее я вывожу структуру, выводим в файл. Вывод производим с помощью операции смещения от указателя, то есть
указатель плюс индекс и разыменовываем и выводим.  Редактор кода не замечает ошибки, но далее при сборке возникает ошибка, не определена локальная переменная.

Вот отрывки из кода:

MARSH *way;                      //Инициализация указателя way
system(«cls»);
SetConsoleTextAttribute(hConsoleHandle, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout << «Введите название начального пункта маршрута (Например: Vitebsk)»;
SetConsoleTextAttribute(hConsoleHandle, FOREGROUND_INTENSITY);
while (index < size)
{
cin >> *(way + index);
ofstream outfile(«MARSHrut_List.txt», ios::app);
outfile << (*(way + index)) << endl;                 //Здесь происходит ошибка
index++;
}

выдает ошибку:

error C4700: использована неинициализированная локальная переменная «way»

Хотя в другом отрывке кода при таком же способе доступа к переменной этой же структуры такой ошибки не происходит:

for (int i = 0; i < size; i++)
{
if (strcmp((*(way + i)).start_point, point) == 0)
{
indicator = true;
cout << «начальная точка: » << (*(way + i)).start_point
<< «\tконечная точка: » << (*(way + i)).finish_point
<< «\tномер маршрута: » << (*(way + i)).marsh_number << «\n»;                     //Поиск в структуре 
}
else
if (strcmp((*(way + i)).finish_point, point) == 0)
{
indicator = true;
cout << «начальная точка: » << (*(way + i)).start_point
<< «\tконечная точка: » << (*(way + i)).finish_point
<< «\tномер маршрута: » << (*(way + i)).marsh_number << «\n»;
}
}

В чем моя ошибка и где?

Перейти к контенту

description title ms.date f1_keywords helpviewer_keywords ms.assetid

Learn more about: Compiler Warning (level 1 and level 4) C4700

Compiler Warning (level 1 and level 4) C4700

08/30/2022

C4700

C4700

2da0deb4-77dd-4b05-98d3-b78d74ac4ca7

uninitialized local variable ‘name‘ used

Remarks

The local variable name has been used, that is, read from, before it has been assigned a value. In C and C++, local variables aren’t initialized by default. Uninitialized variables can contain any value, and their use leads to undefined behavior. Warning C4700 almost always indicates a bug that can cause unpredictable results or crashes in your program.

To fix this issue, you can initialize local variables when they’re declared, or assign a value to them before they’re used. A function can be used to initialize a variable that’s passed as a reference parameter, or when its address is passed as a pointer parameter.

The /sdl (Enable Additional Security Checks) compiler option elevates this warning to an error.

Example

This sample generates C4700 when variables t, u, and v are used before they’re initialized, and shows the kind of garbage value that can result. Variables x, y, and z don’t cause the warning, because they’re initialized before use:

// c4700.cpp
// compile by using: cl /EHsc /W4 c4700.cpp
#include <iostream>

// function takes an int reference to initialize
void initialize(int& i)
{
    i = 21;
}

int main()
{
    int s, t, u, v;   // Danger, uninitialized variables

    s = t + u + v;    // C4700: t, u, v used before initialization
    std::cout << "Value in s: " << s << std::endl;

    int w, x;         // Danger, uninitialized variables
    initialize(x);    // fix: call function to init x before use
    int y{10};        // fix: initialize y, z when declared
    int z{11};        // This C++11 syntax is recommended over int z = 11;

    w = x + y + z;    // Okay, all values initialized before use
    std::cout << "Value in w: " << w << std::endl;
}

When this code is run, t, u, and v are uninitialized, and the output for s is unpredictable:

Value in s: 37816963
Value in w: 42

Не могу запустить рабочий проект под Visual Studio 2013 из-за этой ошибки. Проект старый, делался еще под Visual Studio 6.0. Видимо, там выдавалось предупреждение вместо ошибки.

Переменных много. Может быть, все-таки можно обойти эту ошибку, не инициализируя их все?

Arhadthedev's user avatar

Arhadthedev

11.4k8 золотых знаков39 серебряных знаков69 бронзовых знаков

задан 2 фев 2015 в 21:10

nezzo's user avatar

В свойствах проекта — свойства конфигурации — С/С++ — создание кода — проверка безопасности — Отключить проверку безопасности (/GS-)

ответ дан 2 фев 2015 в 21:34

nezzo's user avatar

nezzonezzo

1021 золотой знак2 серебряных знака8 бронзовых знаков

My issue is i am getting error C4700: uninitialized local variable ‘response’ used on line 26. I know it’s probably something simple I’m completely missing please help.

The local Driver’s License Office has asked you to write a program which grades the written portion of the driver’s license exam. The exam has 20 multiple choice questions. The correct answers are:

1. A 2. D 3. B 4. B 5. C 6. B 7. A 8. B 9. C 10. D 11. A 12. C 13. D 14. B 15. D 16. C 17. C 18. A 19. D 20. B

In main, declare an array and initialize it with the above correct answers. Also declare a second array for an exam taker’s answers, and get a text file name from the user.

1) have the user enter 20 answers from an exam taker and write the answers to the text file (validate that the answers are A, B, C, or D). See the 20 exam taker’s answers below.

Hint: open (and close) the file in the function.

2) read the text file of the exam taker’s answers and store them in the exam taker’s array, which was declared in main.

-a list of the numbers of the questions answered incorrectly (question numbers are 1-20).

Arrays must be processed using loops.

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
  #include <iostream>
#include <iomanip>
#include <fstream>
#include <string>

using namespace std;

void studentsTest(string fileName, char student_answers[], int response, int QUESTION_AMT);
void checkAnswers(char answers[], char student_answers[], int QUESTION_AMT, int MIN_CORRECT);



int main()
{
	int response;
	const int QUESTION_AMT = 20;
	const int MIN_CORRECT = 15;
	char answers[QUESTION_AMT] = { 'A', 'D', 'B', 'B', 'C', 'B', 'A', 'B', 'C', 'D', 'A', 'C', 'D', 'B', 'D', 'C', 'C', 'A', 'D', 'B' };
	char student_answers[QUESTION_AMT];


	string fileName;
	ofstream textOut;


	studentsTest(fileName, student_answers, response, QUESTION_AMT); /*I keep getting error C4700: uninitialized local variable 'responce' used*/

    checkAnswers( answers, student_answers, QUESTION_AMT, MIN_CORRECT);


	cout << endl << endl;
	system("pause");
	return (0);
}
void studentsTest(string fileName, char student_answers[], int response, int QUESTION_AMT)
{
	cout << "nPlease enter a name for your file>";
	getline(cin, fileName);

	ofstream textOut;
	textOut.open(fileName);

	for (int response = 0; response < QUESTION_AMT; response++)
	{
		cout << "Please enter your answers: " << (response + 1) << ": ";
		cin >> student_answers[response];

		while (student_answers[response] != 'A' && student_answers[response] != 'B' && student_answers[response] != 'C' && student_answers[response] != 'D')
		{
			cout << "nError! Answers must be in captial letters! ex: A, B, C";

			cout << "Please enter your answers: " << (response + 1) << ": ";
			cin >> student_answers[response];
		}
	}
	ifstream textIn;
	textIn.open(fileName);
	if (textIn.fail())
	{
		cout << "nText file not found...program will close";
		cout << endl << endl;
		system("pause");
	}
	textIn.close();
}
void checkAnswers(char answers[], char student_answers[], int QUESTION_AMT, int MIN_CORRECT)
{
	int correctAnswers = 0;

	for (int i = 0; i < QUESTION_AMT; i++)
	{
		if (answers[i] == student_answers[i])
			correctAnswers++;
	}
	cout << "nStudent must have at least 15 correct answers to pass.";
	if (correctAnswers >= MIN_CORRECT)
	{
		cout << "nYou passed the exam!";
	}
	else
	{
		cout << "nYou failed the exam!";
	}

	cout << "nThe following is the list of questions that are incorrect";
	for (int i = 0; i < QUESTION_AMT; i++)
	{
		if (answers[i] != student_answers[i])
			cout << "Question # " << i << " is incorrect! " << endl;
	}

	cout << "nCorrect Answers = " << correctAnswers << endl;
	cout << "nIncorrect Answers = " << QUESTION_AMT - correctAnswers << endl;
}

Понравилась статья? Поделить с друзьями:
  • Ошибка 1 diagbox внезапно появилась
  • Ошибка 0хс0000142 при запуске office как исправить
  • Ошибка 0хс0000135 windows 10
  • Ошибка 1 10087 на телефоне
  • Ошибка 0хс000012d при запуске игры как исправить