Posizione di scrittura di violazione dell'accesso all'errore C ++

Posizione di scrittura di violazione dell'accesso all'errore C ++
Ogni volta che hai a che fare con i codici scritti in qualsiasi linguaggio di programmazione, c'è un'alta possibilità che si incontri diversi tipi di errori. Allo stesso modo, mentre lavori con C ++, ti imbatti in alcuni tipi di errori che sembrano piuttosto impegnativi da risolvere. Tuttavia, quando guardi da vicino le tue pratiche di codifica, ti rendi conto che questi errori non sono altro che una conseguenza dei tuoi errori negligenti.

Uno di questi errori è l'errore di posizione della scrittura di violazione dell'accesso in C ++ e questo articolo è dedicato alla discussione di questo errore. Più precisamente, discuteremo del perché questo errore si verifica in primo luogo e quindi getteremo luce sui diversi metodi usando i quali possiamo facilmente sbarazzarci di questo errore in C ++ in Ubuntu 20.04.

Cos'è la violazione dell'accesso all'errore posizione di scrittura in C ++ in Ubuntu 20.04?

Prima di passare al verificarsi di questo errore, abbiamo prima richiesto di riconoscere quale sia realmente questo errore. Come dice il nome, questo errore si verifica ogni volta che si tenta di accedere a una posizione a cui non è consentito accedere in primo luogo. In altre parole, ogni volta che proverai a violare le norme di accesso a una posizione di scrittura impostata dal linguaggio di programmazione C ++, ti imbatterai sempre in questo errore. Ora, sorge la prossima domanda su ciò che particolare pratica di programmazione può dare origine a questo errore.

Bene, la risposta più semplice è che quando non si capisce l'uso effettivo di diverse entità di un linguaggio di programmazione, è molto probabile che tali errori si verifichino. Ad esempio, non sei a conoscenza dell'uso di puntatori e oggetti di una classe. Per accedere alle funzioni del membro di una classe in C ++, tutto ciò di cui hai bisogno è un oggetto di quella classe. Tuttavia, in alcuni casi, potresti richiedere un puntatore di quella classe. In tal caso, ciò che devi capire è che devi inizializzare quel puntatore prima di provare ad accedere a qualsiasi cosa con esso. Non riuscire a farlo comporterà la produzione dell'errore in discussione. Tuttavia, a parte questo, ci possono essere anche altre situazioni che possono dare origine a questo errore.

Esempio del verificarsi dell'errore di posizione di scrittura di violazione dell'accesso in C ++ in Ubuntu 20.04

Per spiegarti lo scenario che può eventualmente portare al verificarsi dell'errore di posizione di scrittura di violazione dell'accesso in C ++, abbiamo codificato il seguente esempio:

In questo piccolo codice C ++ di esempio, abbiamo una classe denominata "Test". All'interno di questa classe, abbiamo solo una singola funzione di membro pubblico chiamato "myfunc ()" il cui tipo di ritorno è "vuoto" i.e., Questa funzione non restituirà nulla. All'interno di questa funzione, abbiamo semplicemente stampato un messaggio sul terminale. Quindi, abbiamo la nostra funzione "main ()" in cui abbiamo creato per la prima volta un puntatore della classe "test". Successivamente, abbiamo cercato di accedere alla funzione "MyFunc ()" della classe "Test" con il puntatore di questa classe usando il "."Operatore. Quindi, abbiamo appena usato l'istruzione "return 0" per chiudere il nostro codice.

Abbiamo usato il comando mostrato di seguito per compilare questo frammento di codice:

Errore $ G ++.Errore CPP -O

Non appena abbiamo tentato di compilare questo codice C ++, l'errore mostrato nella seguente immagine è stato prodotto sul terminale:

In altre parole, l'errore mostrato sopra è anche noto come errore di posizione di scrittura di violazione dell'accesso in C++. Significa che abbiamo cercato di accedere a una posizione a cui non ci era permesso di accedere. Questo errore si è verificato in questo caso perché non abbiamo creato alcuna istanza della classe "test" con cui possiamo accedere alle funzioni dei suoi membri. Piuttosto, abbiamo semplicemente creato un puntatore del tipo "test". Questo puntatore non indicava alcuna posizione particolare a causa del quale conteneva un indirizzo di immondizia. Ecco perché, quando abbiamo provato ad accedere alla funzione membro della classe "Test" durante l'utilizzo di questo puntatore, l'errore è stato prodotto sul terminale poiché questo indirizzo non conteneva il riferimento a un oggetto valido della classe "test" con cui Possiamo accedere alle funzioni dei suoi membri.

Come correggere l'errore discusso sopra?

Esistono due modi diversi per fissare l'errore di posizione della violazione dell'accesso in C ++ che abbiamo appena discusso sopra. Questi due metodi sono stati discussi in dettaglio, apposti di seguito:

Fix 1: mediante allocazione di memoria dinamica in C++
Se si intende creare un puntatore della classe target per accedere alle funzioni dei membri, puoi utilizzare questo metodo. La correzione per questo particolare metodo sotto forma di un codice C ++ è mostrata nella seguente immagine:

In questa correzione, il codice di base per la nostra classe di esempio è lo stesso, tuttavia, abbiamo apportato alcune modifiche alla nostra funzione "principale ()". Innanzitutto, abbiamo creato un puntatore del tipo di "test" durante l'uso della parola chiave "nuova". In questo modo, stiamo essenzialmente inizializzando il puntatore del tipo "test" attraverso l'allocazione dinamica della memoria i.e., Stiamo assegnando questa memoria sul mucchio. Quindi, con l'aiuto di questo puntatore appena inizializzato, abbiamo cercato di accedere alla funzione membro della classe "Test", facendo uso dell'operatore "->" in C++.

Dopo aver apportato questa modifica al nostro codice, è stato compilato correttamente e quando abbiamo eseguito questo codice compilato, abbiamo ottenuto l'output desiderato sul terminale come mostrato nell'immagine seguente:

Fix 2: creando un oggetto valido della classe target in C++
Ora, se non si desidera eseguire l'allocazione dinamica della memoria o, in altre parole, non si desidera affrontare i puntatori, allora puoi utilizzare questo metodo. Questo metodo crea un oggetto valido della classe target in C ++ per accedere alle funzioni dei membri ed è considerato un metodo relativamente più semplice per raggiungere questo obiettivo. La correzione per questo particolare metodo sotto forma di un codice C ++ è mostrata nella seguente immagine:

Ancora una volta, in questa correzione, il codice di base per la nostra classe di esempio è lo stesso, tuttavia, abbiamo apportato alcune modifiche alla nostra funzione "Main ()". Innanzitutto, abbiamo creato un oggetto o un'istanza della classe "Test". Questa istanza o oggetto viene creata sullo stack e non sul mucchio. Quindi, con l'aiuto di questo oggetto appena creato, abbiamo cercato di accedere alla funzione membro della classe "Test", facendo uso di "."Operatore in C++.

Dopo aver apportato questa modifica al nostro codice, è stato compilato correttamente e quando abbiamo eseguito questo codice compilato, abbiamo ottenuto l'output desiderato sul terminale come mostrato nell'immagine seguente:

Conclusione

Questo tutorial ha dato una bella spiegazione dell'errore di posizione di scrittura di violazione dell'accesso in C ++ in Ubuntu 20.04. Per raggiungere questo obiettivo, ti abbiamo spiegato per la prima volta il significato di questo errore seguito dalle pratiche di programmazione che possono portare a questo errore. Dopodiché, abbiamo condiviso con te uno scenario di esempio che può dare origine a questo errore insieme ai metodi attraverso i quali puoi facilmente risolverlo. Dopo aver esaminato questo articolo, sarai in grado di evitare questo errore mentre crei i tuoi programmi in C ++ in Ubuntu 20.04.