Меню

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

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;
}

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка c4600 kyocera 6530
  • Ошибка c7301 kyocera taskalfa 3501i