Visual C ++ - ошибка проверки времени выполнения № 3 - переменная не инициализирована - PullRequest
0 голосов
/ 08 февраля 2012

Я использую Visual C ++ 2010 Express Edition для компиляции и запуска файлов .exe, которые я пишу на языке программирования C ++. Я пытаюсь создать логику на основе циклов, используя C ++, чтобы спросить пользователя, сколько записей он хочет ввести, и задать вопросы, ограниченные этим нет. записей. Например, я хочу вывести «Сколько символов вы хотите ввести?». Скажем, пользователь дает ответ в виде «3», который хранится в переменной int «записи». Затем я хочу задать вопрос 3 раза, прежде чем он остановится и перейдет к следующей строке кода. Я надеюсь, вы понимаете, вот блок кода, чтобы продемонстрировать, что я делаю:

#include <iostream>
#include <string>
using namespace std;

int main()
{
   cout << "How many values do you need to enter?: ";
   int entries;
   cin >> entries;
   int offset, number;
   string valueName[50];
   float valueValue[50];
   for (offset = 0; offset < entries; offset++)
   {
      cout << "Enter " << number << " Value Name: ";
      cin >> valueName[offset];
      cout << "Enter " << valueName[offset] << "\'s value: ";
      cin >> valueValue[offset];
      for (number = 1; number <= entries; number++)
      {
      }
   }
   char response;
   cin >> response;
   return 0;
}

Странно, когда я запускаю эту простую программу, она не работает, когда я ввожу имя значения для вставки в 0-й элемент массива valueName []. Он просто приостанавливает выполнение программы, и появляется диалоговое окно с сообщением «Ошибка проверки времени выполнения № 3 - переменная« число »используется без инициализации!» Другая проблема, связанная с этой программой, заключается в том, что в течение довольно долгого времени, когда я запускал эту программу, это окно «Ошибка проверки времени выполнения № 3» никогда не появлялось, а когда этого не происходило, числовое значение становилось неправильным и сначала начиналось с 1, и затем для следующего цикла прыгнул до 6, а затем повторил 6 снова для следующего цикла!
Пожалуйста, помогите мне! Я проверил онлайн, обыскивая эту проблему везде, но она просто не относится к моему типу проблемы!
Это потому, что переменные находятся вне области видимости?
Но они объявлены вне циклов for, верно?

Так что, пожалуйста, помогите мне!

Ответы [ 4 ]

5 голосов
/ 08 февраля 2012

Среда выполнения говорит вам правду, следующая строка появляется после того, как вы объявили число как int, но не дали ему значение.

 cout << "Enter " << number << " Value Name: ";

В вашем коде вы декларируете следующее, в C ++ это означает, что дайте мне 2 дюйма, но значения еще не определены, например,

int offset, number;

Измените его на что-то вроде этого.

int offset = 0;
int number = 0;
2 голосов
/ 08 февраля 2012

Проблема именно в том сообщении об ошибке, которое вы получаете. Вы используете переменную число без ее инициализации.

Вы используете переменную прямо здесь, в верхней части цикла, когда она еще ни к чему не инициализирована:

cout << "Enter " << number << " Value Name: ";

Каково ваше намерение с числовой переменной? На самом деле, похоже, это не служит какой-либо цели. Если вы хотите напечатать, в какой записи вы находитесь в данный момент, вы можете вместо этого использовать переменную offset , например:

cout << "Enter " << offset << " Value Name: ";

Но это все еще кажется мне немного неясным.

Но причина вашей проблемы в том, что значение неинициализировано, поэтому вы испытываете неопределенное поведение. Это также причина того, что Visual Studio не всегда ловит это; он, вероятно, всегда будет ловить в режиме отладки, но в режиме выпуска он почти никогда не будет ловить его. Вам необходимо инициализировать все ваши переменные перед их использованием.

2 голосов
/ 08 февраля 2012

Вы печатаете переменную number без присвоения ей первой, то есть она неинициализирована . Когда он печатает какое-то случайное число, это происходит из-за того, что происходит в памяти во время запуска программы. Присвойте ему значение, прежде чем использовать его.

0 голосов
/ 09 сентября 2014

В моем случае это было потому, что переменная extern была объявлена ​​дважды.

...