Feil betinget hopp eller bevegelse avhenger av den uinitialiserte verdien

Feil betinget hopp eller bevegelse avhenger av den uinitialiserte verdien
Hvis du forbereder deg til eksamen i C ++, vil de fleste av dere bruke Valgrind for å analysere bidragene dine. Valgrind er et lagringsrelatert feilsjekkingsverktøy. En utbredt myte er at valgrind utelukkende identifiserer minnelekkasjer, og at du derfor ikke bør motta valgrind advarsler når du ikke bruker ny i koden din. VALGRIND kan oppdage en rekke minneproblemer i tillegg til lekkasjer, som usignert minnebruk eller tilgang. Videre, når du ikke bruker ny, kan du lekke lagring hvis koden slutter feil og ikke vil være i stand til å rydde opp i heapobjekter. Uoppdagede feil eller bruk av avsluttende metoden (som ikke vil bli avstøpt i C ++) kan føre til en upassende avkjørsel. Feilmeldinger fra Valgrind kan være langvarig og skremmende. Dette innlegget vil vise deg hvordan og hvor du skal administrere problemet med "betinget hopp eller trekk avhenger av uinitialisert verdi (er)" i Ubuntu 20.04 mens du jobber i C++.

Installer valgrind i Ubuntu 20.04:

Valgrind -pakken kan fremheve en advarsel eller feil på skallet mens den kanskje ikke vises med C ++ -kompilatoren på Ubuntu -terminalen. Derfor må vi installere det først. Så du må åpne terminalen til Ubuntu 20.04 med snarveisnøkkelen “Ctrl+Alt+T”. Ubuntus APT -pakkekommando brukes til dette formålet så langt i skallet, som vist nedenfor.

$ sudo apt install valgrind

Feilkoden kan sees på som "betinget hopp eller flytt. Varselet "bruk av en uinitialisert verdi av størrelse n" kan også vises av og til. Poenget som koden er avhengig av den usignerte variabelen, vil bli rapportert av valgrind. Dette vil ikke indikere en feil hvis uinitialiserte verdier blir flyttet og klonet rundt i lagring så langt applikasjonen ikke er avhengige av dem. Det er vanskelig å finne feilen fordi den kan være langt fjernt fra siden Valgrind -rapporter. Du kan få hjelp med valgrind -kommandoer ved hjelp av hjelpekommandoen og nøkkelordet "Valgrind" for å bruke dem på skallet ditt. Utgangen for hjelpekommandoen vil åpne for Ubuntu's Manual for Valgrind, som du allerede kan se på det vedlagte bildet nedenfor. Bruk noen av disse argumentene i valgrind -kommandoene dine.

$ VALGRIND -HELP

Eksempel 01:

Så vi vil se på de maksimale mulige eksemplene som kan føre til at Valgrind viser denne feilen eller advarselen på terminalen mens han bruker valgrind -kommandoen. Så vi har opprettet en fil for C ++ -kode ved hjelp av Linux “Touch” -instruksjon. Denne nyopprettede filen har vært lokalisert i hjemmemappen og åpnet i Nano -redigereren for å gjøre kode.

$ berøringsfeil.CC
$ nano feil.CC

For eksempel har vi startet koden med iostream og navneområdet til C++. Disse er nødvendige for å få en kode til å fungere. Innenfor en hovedfunksjon () har vi ganske enkelt erklært en heltallvariabel, og på neste linje har vi økt variabelen med 3 uten å initialisere den. COUT -uttalelsen brukes til å vise inkrementvariabelen “x” -verdien.

#inkludere
ved hjelp av navneområdet STD;
int main ()
int x;
x += 3; // Feil
cout << x << endl;

Det finnes ingen feil så langt i noen situasjoner som nedenfor for å utføre denne koden med en enkel G ++ kompilator av C ++ språk. Den vil også vise den økte verdien som vist.

$ g ++ feil.CC
$ ./en.ute

På den annen side tillater valgrind oss ​​å øke eller tildele x+3 til “x” siden programmets tilsynelatende ytelse ikke blir endret før du prøver å skrive ut vektorens innhold. VALGRIND vil bare vise deg linjenummeret som betinget hoppfeil er funnet så langt og få deg til å forstå at du bruker en usignert variabel et sted. Å bestemme hvilken uinitialisert variabel eller hvorfor den ikke ble initialisert, kan imidlertid kreve betydelig rettsmedisinsk arbeid.

$ valgrind -tool = memCheck -LEAK -Check = ja ./feil.CC

Eksempel 02:

La oss se på et annet program med en annen måte å få den samme feilen. Vi har tatt med standard “STD” -navner for C ++, og iOstream via “#include” i dette programmet. Vi har kommentert Main () -metodedeklarasjonen og erklært en heltallvariabel “x.”" Mens "-løkken brukes til å sjekke en tilstand og utføre reduksjonen.

#inkludere
ved hjelp av navneområdet STD;
int main ()
int x;
mens (x> 4) // feil
x--;
//

Det vil ikke bare gjøre valgrind forårsaker feilen "betinget hopp eller bevegelse avhenger av uinitialisert verdi", men vil også forårsake en feil med G ++, som vist nedenfor. For å løse dette problemet, må du ukomne det kommenterte kodeområdet og kjøre det.

$ g ++ feil.CC

Konklusjon:

Dette handlet om Valgrind -feilen: “Betinget hopp eller trekk avhenger av uinitialisert verdi” i C ++ -kode. Vi har opprettholdt sekvensen ved å installere Valgrind, åpne manualen for hjelp, lage en C ++ -kode og utføre den med G ++ og Valgrind på skallet for å forstå det hele bedre og løse det. Vi har lagt til to unike illustrasjoner for en bedre forståelse av denne feilen. Alle disse eksemplene implementeres på Ubuntu 20.04 System. Du kan imidlertid bruke all annen distribusjon også. Vi tror at det vil være veldig gunstig.