Visual C++ – Eșecul verificării în timp de execuție #3 – Variabila nu este initiliazată (Programare, C++, Visual C++, Bucle, Pentru Buclă, Timp De Execuție)

Ram Sidharth a intrebat.

Folosesc Visual C++ 2010 Express Edition pentru a compila și rula fișierele .exe pe care le scriu în limbajul de programare C++. Încerc să creez o logică bazată pe buclă folosind C++ pentru a întreba utilizatorul câte intrări alege să introducă și pentru a pune întrebări limitate la acel nr. de intrări. De exemplu, vreau să afișez: „Câte caractere doriți să introduceți?:” Să presupunem că utilizatorul dă răspunsul „3”, care este stocat în variabila int „entries”. Apoi vreau să continui să pun întrebarea de 3 ori înainte de a se opri și de a continua cu următoarea linie de cod. Sper că ați înțeles, iată un bloc de cod pentru a demonstra ceea ce fac:

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

În mod ciudat, atunci când execut acest program simplu, nu reușește atunci când introduc numele valorii care urmează să fie inserată în al 0-lea element al matricei valueName[]. Pur și simplu se oprește execuția programului și apare o casetă de dialog care spune „Runtime Check Failure #3 – Variabila ‘număr’ este folosită fără a fi inițializată!” O altă problemă legată de acest program este că, de ceva timp, când am rulat acest program, această casetă „Runtime Check Failure #3” nu a apărut niciodată, iar când nu a apărut, valoarea numărului a luat-o razna, și a început mai întâi cu 1, iar apoi pentru următoarea buclă a sărit la 6, și apoi a repetat din nou 6 pentru următoarea buclă!
Vă rog să mă ajutați! Am verificat pe internet scotocind peste tot această problemă, dar pur și simplu nu se aplică la tipul meu de problemă!
Este din cauză că variabilele sunt în afara domeniului de aplicare?
Dar ele sunt declarate în afara buclelor for, nu?

Așa că vă rog să mă ajutați!

Comentarii

  • Dacă ceva este în afara domeniului de aplicare, compilatorul nu este fericit. Dacă primești erori de execuție, înseamnă că ai trecut de faza de compilare. Din punct de vedere sintactic totul este corect. –  > Por Mahesh.
  • Dacă intrați în debugger atunci când primiți acest mesaj, vă aterizează chiar pe linia care folosește variabila neinițializată. De asemenea, compilarea ar trebui să vă dea un avertisment: warning C4700: uninitialized local variable 'number' used Toate acestea îți spun exact care și unde este problema. –  > Por Michael Burr.
  • mulțumesc mult Mahesh și Michael Burr pentru informații, mă bucur să vă spun că problema a fost rezolvată datorită cooperării voastre și a celorlalți. Vă mulțumesc foarte mult. –  > Por Ram Sidharth.
4 răspunsuri
eggbox

Runtime-ul îți spune adevărul, următoarea linie vine după ce ai declarat numărul ca fiind un int dar nu i-ai dat o valoare.

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

În codul tău ai declarat următoarele, în C++ asta înseamnă dă-mi 2 ints dar valorile nu sunt încă definite, de ex.

int offset, number;

Schimbați-o în ceva de genul acesta …

int offset = 0;
int number = 0;

Comentarii

  • Mulțumesc mult pentru cooperare ‘eggbox’. Mă bucur să-ți spun că problema a fost rezolvată datorită comentariilor tale și ale celorlalți! –  > Por Ram Sidharth.
Un tip programator

Tipăriți variabila number fără să o atribuiți mai întâi, adică este neinițializată. Când se tipărește un număr oarecare este pentru că asta se întâmplă să fie în memorie în momentul în care rulezi programul. Atribuiți-i o valoare înainte de a o utiliza.

Comentarii

  • Ceea ce spui este corect și datorită comentariului tău și a multor altora, am reușit să-mi rezolv problema. Vă mulțumesc foarte mult Joachim Pileborg. –  > Por Ram Sidharth.
Robert Kelly

Problema este exact mesajul de eroare pe care îl primiți. Folosiți variabila număr fără a o inițializa.

Folosești variabila chiar aici, în partea de sus a buclei tale, când nu a fost inițializată la nimic încă:

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

Care este intenția dvs. cu variabila număr? Nu pare să servească niciun scop. Dacă doriți să imprimați la ce intrare vă aflați în prezent, ați putea folosi variabila offset în schimb, astfel:

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

Dar tot mi se pare puțin neclar.

Dar motivul pentru care aveți o problemă este că valoarea este neinițializată, deci aveți un comportament nedefinit. Acesta este, de asemenea, motivul pentru care Visual Studio nu o detectează întotdeauna; probabil că o va detecta întotdeauna în modul Debug, dar în modul Release nu o va detecta aproape niciodată. Trebuie să vă inițializați toate variabilele înainte de a le utiliza.

Comentarii

  • Mulțumesc „Robert Kelly” pentru cooperarea dumneavoastră în această problemă pe care o am de ceva timp. Sunt fericit să vă spun că problema a fost rezolvată cu succes datorită comentariilor dumneavoastră și ale tuturor celorlalți. Vă mulțumesc. –  > Por Ram Sidharth.
Nav

În cazul meu a fost din cauza unei extern variabilă a fost declarată de două ori.