Błąd dostępu do naruszenia Lokalizacja pisania C ++

Błąd dostępu do naruszenia Lokalizacja pisania C ++
Ilekroć masz do czynienia z kodami napisanymi w dowolnym języku programowania, istnieje duża szansa, że ​​napotkasz różne rodzaje błędów. Podobnie, pracując z C ++, spotykasz niektóre rodzaje błędów, które wydają się dość trudne do rozwiązania. Jednak kiedy uważnie przyjrzysz się swoim praktykom kodowania, zdajesz sobie sprawę, że te błędy są tylko konsekwencją twoich nieostrożnych błędów.

Jednym z takich błędów jest błąd lokalizacji pisania naruszenia dostępu w C ++, a ten artykuł jest poświęcony dyskusji na temat tego błędu. Mówiąc dokładniej, omówimy, dlaczego ten błąd występuje w pierwszej kolejności, a następnie rzucimy światło na różne metody, z których możemy łatwo pozbyć się tego błędu w C ++ w Ubuntu 20.04.

Co to jest Lokalizacja pisania naruszenia błędu w C ++ w Ubuntu 20.04?

Przed przejściem do wystąpienia tego błędu najpierw musieliśmy rozpoznać ten błąd. Jak mówi nazwa, ten błąd występuje, gdy próbujesz uzyskać dostęp do lokalizacji, do której nie możesz uzyskać dostępu. Innymi słowy, za każdym razem, gdy spróbujesz naruszyć normy dostępu do lokalizacji pisania skonfigurowanej przez język programowania C ++, zawsze napotkasz ten błąd. Teraz pojawia się następne pytanie, które konkretna praktyka programowania może powodować ten błąd.

Cóż, najprostszą odpowiedzią jest to, że gdy nie rozumiesz faktycznego użycia różnych podmiotów języka programowania, takie błędy są bardzo prawdopodobne, że wystąpią. Na przykład nie jesteś świadomy użycia wskaźników i przedmiotów klasy. Aby uzyskać dostęp do funkcji członka klasy w C ++, wszystko, czego potrzebujesz. Jednak w niektórych przypadkach możesz wymagać wskaźnika tej klasy. W takim przypadku musisz zrozumieć, że musisz zainicjować ten wskaźnik przed próbą dostępu do niego. Nieprzestrzeganie tego spowoduje utworzenie omawianego błędu. Jednak oprócz tego mogą być również inne sytuacje, które mogą powodować ten błąd.

Przykład wystąpienia błędu lokalizacji pisania naruszenia dostępu w C ++ w Ubuntu 20.04

W celu wyjaśnienia scenariusza, który może prowadzić do wystąpienia błędu lokalizacji pisania naruszenia dostępu w C ++, zakodowaliśmy następujący przykład:

W tym małym przykładowym kodzie C ++ mamy klasę o nazwie „Test”. W tej klasie mamy tylko jedną funkcję członka publicznego o nazwie „myfunc ()”, którego typem jest „void” i.mi., Ta funkcja niczego nie zwróci. W ramach tej funkcji po prostu wydrukowaliśmy wiadomość na terminalu. Następnie mamy naszą funkcję „Main ()”, w której najpierw stworzyliśmy wskaźnik „testu” klasy „. Następnie próbowaliśmy uzyskać dostęp do funkcji „myfunc ()” klasy „test” z wskaźnikiem tej klasy za pomocą „.„Operator. Następnie użyliśmy instrukcji „Return 0”, aby zamknąć nasz kod.

Użyliśmy polecenia pokazanego poniżej, aby skompilować ten fragment kodu:

Błąd $ g ++.CPP -O Błąd

Gdy tylko próbowaliśmy skompilować ten kod C ++, na terminalu powstał błąd pokazany na poniższym obrazie:

Innymi słowy, błąd pokazany powyżej jest również znany jako błąd lokalizacji pisania naruszenia dostępu w C w C++. Oznacza to, że próbowaliśmy uzyskać dostęp do lokalizacji, do której nie mogliśmy uzyskać dostępu. Ten błąd wystąpił w tym przypadku, ponieważ nie utworzyliśmy żadnej instancji klasy „test”, z którą możemy uzyskać dostęp do jej funkcji członka. Raczej po prostu stworzyliśmy wskaźnik typu „test”. Ten wskaźnik nie wskazywał na żadną konkretną lokalizację, ponieważ zawierał adres śmieciowy. Dlatego, kiedy próbowaliśmy uzyskać dostęp do funkcji członka klasy „test” podczas korzystania z tego wskaźnika, błąd został wykonany na terminalu, ponieważ ten adres nie zawierał odniesienia do prawidłowego obiektu klasy „test”, z którą Możemy uzyskać dostęp do jego funkcji członka.

Jak naprawić błąd omówiony powyżej?

Istnieją dwa różne sposoby naprawy błędu lokalizacji pisania naruszenia dostępu w C ++, które właśnie omówiliśmy powyżej. Te dwie metody zostały szczegółowo omówione, przymocowane poniżej:

Napraw 1: przez dynamiczną alokacja pamięci w C++
Jeśli zamierzasz utworzyć wskaźnik klasy docelowej w celu uzyskania dostępu do jej funkcji członka, możesz skorzystać z tej metody. Poprawka dla tej konkretnej metody w postaci kodu C ++ pokazano na poniższym obrazku:

W tej poprawce podstawowy kod naszej przykładowej klasy jest taki sam, jednak wprowadziliśmy kilka zmian w naszej funkcji „main ()”. Najpierw stworzyliśmy wskaźnik typu „test” podczas korzystania z „nowego” słowa kluczowego. Robiąc to, zasadniczo inicjujemy wskaźnik typu „test” poprzez dynamiczną przydział pamięci i.mi., Przydzielamy tę pamięć na stosie. Następnie, z pomocą tego nowo zainicjowanego wskaźnika, próbowaliśmy uzyskać dostęp do funkcji członkowskiej klasy „test” podczas korzystania z operatora „->” w C++.

Po dokonaniu tej zmiany w naszym kodzie został pomyślnie skompilowany, a kiedy wykonaliśmy ten skompilowany kod, otrzymaliśmy pożądane dane wyjściowe na terminalu, jak pokazano na poniższym obrazku:

Poprawka 2: Tworząc prawidłowy obiekt klasy docelowej w C++
Teraz, jeśli nie chcesz wykonywać dynamicznej alokacji pamięci lub innymi słowy, nie chcesz radzić sobie z wskaźnikami, możesz skorzystać z tej metody. Ta metoda tworzy prawidłowy obiekt klasy docelowej w C ++ w celu uzyskania dostępu do jej funkcji członka i jest uważana za stosunkowo łatwiejszą metodę osiągnięcia tego celu. Poprawka dla tej konkretnej metody w postaci kodu C ++ pokazano na poniższym obrazku:

Ponownie, w tej poprawce, podstawowy kod naszej przykładowej klasy jest taki sam, jednak wprowadziliśmy kilka zmian w naszej funkcji „main ()”. Najpierw stworzyliśmy obiekt lub instancję klasy „test”. Ta instancja lub obiekt jest tworzony na stosie, a nie na stercie. Następnie, z pomocą tego nowo utworzonego obiektu, staraliśmy się uzyskać dostęp do funkcji członka klasy „test”, korzystając z „.„Operator w C++.

Po dokonaniu tej zmiany w naszym kodzie został pomyślnie skompilowany, a kiedy wykonaliśmy ten skompilowany kod, otrzymaliśmy pożądane dane wyjściowe na terminalu, jak pokazano na poniższym obrazku:

Wniosek

Ten samouczek przedstawił niezły wyjaśnienie błędu lokalizacji pisania naruszenia dostępu w C ++ w Ubuntu 20.04. Aby osiągnąć ten cel, najpierw wyjaśniliśmy znaczenie tego błędu, a następnie praktyki programowania, które mogą prowadzić do tego błędu. Następnie udostępniliśmy Ci przykładowy scenariusz, który może powodować ten błąd wraz z metodami, za pomocą których możesz go łatwo naprawić. Po przejrzeniu tego artykułu będziesz w stanie uniknąć tego błędu podczas tworzenia programów w C ++ w Ubuntu 20.04.