Erro Acesso Violação Escrita Localização C ++

Erro Acesso Violação Escrita Localização C ++
Sempre que você está lidando com códigos escritos em qualquer linguagem de programação, há uma grande chance de você encontrar diferentes tipos de erros. Da mesma forma, enquanto trabalha com C ++, você encontra certos tipos de erros que parecem bastante desafiadores para resolver. No entanto, quando você olha atentamente para suas práticas de codificação, percebe que esses erros não passam de uma consequência de seus erros descuidados.

Um desses erros é o erro de localização da violação do acesso em C ++ e este artigo é dedicado à discussão deste erro. Mais precisamente, discutiremos por que esse erro ocorre em primeiro lugar e depois lançaremos luz sobre os diferentes métodos usando que podemos facilmente nos livrar desse erro em C ++ no Ubuntu 20.04.

O que é localização de violação de acesso ao erro de erro em C ++ no Ubuntu 20.04?

Antes de seguir para a ocorrência desse erro, primeiro precisamos reconhecer o que esse erro realmente é. Como o nome diz, esse erro ocorre sempre que você tenta acessar um local que não tem permissão para acessar em primeiro lugar. Em outras palavras, sempre que você tentar violar as normas de acessar um local de escrita configurado pela linguagem de programação C ++, você sempre encontrará esse erro. Agora, surge a próxima pergunta a qual prática de programação específica pode dar origem a este erro.

Bem, a resposta mais simples é que, quando você não entende o uso real de diferentes entidades de uma linguagem de programação, é provável que esses erros ocorram. Por exemplo, você não tem conhecimento do uso de ponteiros e objetos de uma classe. Para acessar as funções de membro de uma classe em C ++, tudo o que você precisa é um objeto dessa classe. No entanto, em alguns casos, você pode precisar de um ponteiro dessa classe. Nesse caso, o que você precisa entender é que você precisa inicializar esse ponteiro antes de tentar acessar qualquer coisa com ele. Não fazer isso resultará na produção do erro em discussão. No entanto, além disso, também pode haver outras situações que podem dar origem a este erro.

Exemplo da ocorrência do erro de localização da violação da violação do acesso em C ++ no Ubuntu 20.04

Para explicar a você o cenário que pode levar à ocorrência do erro de localização da escrita por violação de acesso em C ++, codificamos o seguinte exemplo:

Nesta pequena amostra de código C ++, temos uma classe chamada "teste". Dentro desta classe, temos apenas uma única função de membro público chamado "myfunc ()" cujo tipo de retorno é "vazio" i.e., Esta função não retornará nada. Dentro dessa função, simplesmente imprimimos uma mensagem no terminal. Em seguida, temos nossa função "main ()" na qual criamos um ponteiro da classe "teste". Depois disso, tentamos acessar a função "myfunc ()" da classe "teste" com o ponteiro desta classe usando o ".Operador. Então, acabamos de usar a declaração "Return 0" para fechar nosso código.

Usamos o comando mostrado abaixo para compilar este snippet de código:

$ G ++ Erro.Erro de CPP -O

Assim que tentamos compilar esse código C ++, o erro mostrado na imagem a seguir foi produzido no terminal:

Em outras palavras, o erro mostrado acima também é conhecido como erro de localização de violação de acesso em C em C++. Isso significa que tentamos acessar um local que não tivemos permissão para acessar. Este erro ocorreu neste caso porque não criamos nenhuma instância da classe "teste" com a qual podemos acessar suas funções de membro. Em vez disso, simplesmente criamos um ponteiro do tipo "teste". Este ponteiro não estava apontando para nenhum local em particular, devido ao qual continha um endereço de lixo. É por isso que, quando tentamos acessar a função de membro da classe "teste" enquanto usava esse ponteiro, o erro foi produzido no terminal, pois esse endereço não continha a referência a um objeto válido da classe "teste" com a qual Podemos acessar suas funções de membro.

Como corrigir o erro discutido acima?

Existem duas maneiras diferentes de corrigir o erro de localização da violação da violação do acesso em C ++ que acabamos de discutir acima. Esses dois métodos foram discutidos em detalhes, afixados abaixo:

Correção 1: por alocação de memória dinâmica em C++
Se você pretende criar um ponteiro da classe de destino para acessar suas funções de membro, poderá usar esse método. A correção para este método específico na forma de um código C ++ é mostrado na imagem a seguir:

Nesta correção, o código básico para a nossa classe de amostra é o mesmo, no entanto, fizemos algumas alterações em nossa função "main ()". Primeiro, criamos um ponteiro do tipo "teste" enquanto utilizamos a palavra -chave "nova". Fazendo isso, estamos basicamente inicializando o ponteiro do tipo "teste" através da alocação dinâmica de memória i.e., Estamos alocando essa memória na pilha. Então, com a ajuda deste ponteiro recém-inicializado, tentamos acessar a função de membro da classe "teste" enquanto usava o operador "->" em C em C++.

Depois de fazer essa alteração em nosso código, ela foi compilada com sucesso e, quando executamos esse código compilado, obtivemos a saída desejada no terminal, como mostrado na imagem abaixo:

Correção 2: criando um objeto válido da classe de destino em C++
Agora, se você não quiser executar a alocação de memória dinâmica, ou, em outras palavras, não deseja lidar com os ponteiros, então você pode usar esse método. Este método cria um objeto válido da classe de destino em C ++ para acessar suas funções de membro e é considerado um método relativamente mais fácil de atingir esse objetivo. A correção para este método específico na forma de um código C ++ é mostrado na imagem a seguir:

Novamente, nessa correção, o código básico para a nossa classe de amostra é o mesmo, no entanto, fizemos algumas alterações em nossa função "main ()". Primeiro, criamos um objeto ou instância da classe "teste". Esta instância ou objeto é criado na pilha e não na pilha. Então, com a ajuda deste objeto recém -criado, tentamos acessar a função de membro da classe "teste" enquanto utiliza o ".Operador em C++.

Depois de fazer essa alteração em nosso código, ela foi compilada com sucesso e, quando executamos esse código compilado, obtivemos a saída desejada no terminal, como mostrado na imagem abaixo:

Conclusão

Este tutorial deu uma boa explicação do erro de localização da violação da violação do acesso em C ++ no Ubuntu 20.04. Para alcançar esse objetivo, primeiro explicamos a você o significado desse erro seguido pelas práticas de programação que podem levar a esse erro. Depois disso, compartilhamos com você um cenário de exemplo que pode dar origem a esse erro junto com os métodos pelos quais você pode corrigi -lo facilmente. Depois de passar por este artigo, você será capaz de evitar esse erro ao criar seus programas em C ++ no Ubuntu 20.04.