Feiladgangsovertredelse Skriving Plassering C ++

Feiladgangsovertredelse Skriving Plassering C ++
Hver gang du har å gjøre med koder skrevet på ethvert programmeringsspråk, er det stor sjanse for at du møter forskjellige typer feil. Tilsvarende, mens du jobber med C ++, kommer du over visse typer feil som virker ganske utfordrende å løse. Men når du ser nøye på kodingspraksis, innser du at disse feilene ikke er annet enn en konsekvens av dine uforsiktige feil.

En slik feil er tilgangsfeilen for tilgang til overtredelse i C ++, og denne artikkelen er dedikert til diskusjonen om denne feilen. Mer presist vil vi diskutere hvorfor denne feilen oppstår i utgangspunktet, og da vil vi kaste lys over de forskjellige metodene som vi lett kan bli kvitt denne feilen i C ++ i Ubuntu 20.04.

Hva er feiladgangsovertredelse som skriver plassering i C ++ i Ubuntu 20.04?

Før vi gikk videre til forekomsten av denne feilen, krevde vi først å gjenkjenne hva denne feilen egentlig er. Som navnet sier, oppstår denne feilen når du prøver å få tilgang til et sted du ikke har tilgang til i utgangspunktet. Med andre ord, når du vil prøve å krenke normene for å få tilgang til et skriveplassering som er satt opp av C ++ programmeringsspråket, vil du alltid komme over denne feilen. Nå oppstår det neste spørsmålet at hvilken bestemt programmeringspraksis kan gi opphav til denne feilen.

Vel, det enkleste svaret er at når du ikke forstår den faktiske bruken av forskjellige enheter på et programmeringsspråk, er det sannsynlig at slike feil oppstår. For eksempel er du ikke klar over bruken av pekere og gjenstander i en klasse. For å få tilgang til medlemsfunksjonene til en klasse i C ++, er alt du trenger et objekt i den klassen. I noen tilfeller kan du imidlertid kreve en peker i den klassen. I så fall er det du trenger å forstå at du må initialisere den pekeren før du prøver å få tilgang til noe med den. Unnlatelse av å gjøre dette vil resultere i produksjon av feilen som diskuteres. Bortsett fra dette kan det imidlertid være noen andre situasjoner som kan gi opphav til denne feilen.

Eksempel på forekomsten av tilgangsfeilen for tilgang til overtredelse Skriving i C ++ i Ubuntu 20.04

For å forklare deg scenariet som muligens kan føre til forekomst av feilfeil for overtredelse av overtredelse som skriver om C ++, har vi kodet følgende eksempel:

I denne lille prøven C ++ -koden har vi en klasse som heter "Test". Innenfor denne klassen har vi bare en enkelt offentlig medlemsfunksjon som heter "myfunc ()" hvis returtype er "ugyldig" i.e., Denne funksjonen vil ikke returnere noe. Innenfor denne funksjonen har vi ganske enkelt skrevet ut en melding på terminalen. Deretter har vi vår "Main ()" -funksjon der vi først har laget en peker i klassen "Test". Etter det har vi prøvd å få tilgang til "myfunc ()" -funksjonen til "test" -klassen med pekeren til denne klassen ved å bruke ".”Operatør. Deretter har vi nettopp brukt "Return 0" -erklæringen for å lukke koden vår.

Vi brukte kommandoen vist nedenfor for å kompilere dette kodebiten:

$ g ++ feil.CPP -o Feil

Så snart vi forsøkte å kompilere denne C ++ -koden, ble feilen vist i følgende bilde produsert på terminalen:

Med andre ord, feilen som er vist ovenfor er også kjent som FEIL -feilen++. Det betyr at vi har prøvd å få tilgang til et sted som vi ikke fikk tilgang til. Denne feilen oppstod i dette tilfellet fordi vi ikke opprettet noen forekomst av "test" -klassen som vi kan få tilgang til medlemsfunksjonene. Snarere opprettet vi ganske enkelt en peker av "test" -typen. Denne pekeren pekte ikke på noe bestemt sted på grunn av at den inneholdt en søppeladresse. Det var grunnen til at da vi prøvde å få tilgang til medlemsfunksjonen til "Test" -klassen mens vi brukte denne pekeren, ble feilen produsert på terminalen siden denne adressen ikke inneholdt referansen til et gyldig objekt i "test" -klassen som Vi får tilgang til medlemsfunksjonene.

Hvordan fikse feilen omtalt ovenfor?

Det er to forskjellige måter å fikse tilgangsfeilen på tilgangsbrudd på C ++ som vi nettopp har diskutert ovenfor. Disse to metodene har blitt diskutert i detalj, festet nedenfor:

Fix 1: ved dynamisk minnetildeling i C++
Hvis du har tenkt å opprette en peker i målklassen for tilgang til medlemsfunksjonene, kan du benytte deg av denne metoden. Fiksingen for denne spesielle metoden i form av en C ++ -kode vises i følgende bilde:

I denne løsningen er den grunnleggende koden for vår prøveklasse den samme, men vi har gjort noen få endringer i vår "Main ()" -funksjon. Først har vi laget en peker av "test" -typen mens vi benytter oss av det "nye" nøkkelordet. Når vi gjør dette, initialiserer vi i hovedsak “Test” -typen pekeren gjennom dynamisk minnetildeling i.e., Vi tildeler dette minnet på haugen. Deretter, ved hjelp av denne nylig initialiserte pekeren, har vi prøvd å få tilgang til medlemsfunksjonen til "Test" -klassen mens vi benytter oss av "->" -operatøren i C++.

Etter å ha gjort denne endringen i koden vår, ble den samlet, og da vi utførte denne kompilerte koden, fikk vi ønsket utgang på terminalen som vist på bildet nedenfor:

Fix 2: Ved å opprette et gyldig objekt i målklassen i C++
Hvis du ikke vil utføre den dynamiske minnetildelingen, eller med andre ord, vil du ikke takle pekerne, kan du benytte deg av denne metoden. Denne metoden skaper et gyldig objekt av målklassen i C ++ for å få tilgang til medlemsfunksjonene, og det anses som en relativt enklere metode for å oppnå dette målet. Fiksingen for denne spesielle metoden i form av en C ++ -kode vises i følgende bilde:

Igjen, i denne løsningen, er den grunnleggende koden for vår eksempler på den samme, men vi har gjort noen få endringer i vår "Main ()" -funksjon. Først har vi opprettet et objekt eller forekomst av "test" -klassen. Denne forekomsten eller objektet er opprettet på bunken og ikke på haugen. Deretter, ved hjelp av dette nyopprettede objektet, har vi prøvd å få tilgang til medlemsfunksjonen til "test" -klassen mens vi benytter oss av ".”Operatør i C++.

Etter å ha gjort denne endringen i koden vår, ble den samlet, og da vi utførte denne kompilerte koden, fikk vi ønsket utgang på terminalen som vist på bildet nedenfor:

Konklusjon

Denne opplæringen ga en fin forklaring på tilgangsfeilen på tilgangsbruddet i C ++ i Ubuntu 20.04. For å oppnå dette målet, forklarte vi deg først betydningen av denne feilen etterfulgt av programmeringspraksis som kan føre til denne feilen. Etter det delte vi deg et eksempel på et eksempel som kan gi opphav til denne feilen sammen med metodene du enkelt kan fikse det. Etter å ha gått gjennom denne artikkelen, vil du være i stand til å unngå denne feilen mens du oppretter programmene dine i C ++ i Ubuntu 20.04.