Por que tantos erros “AccessViolationException” s?
-
18-09-2019 - |
Pergunta
Eu tenho visto muitos erros ao longo de minha vida, usando o computador, e muitos deles parecia ser de acesso Exceções Violação de chamada saída para a memória não-legível ou 0x00000000 / 0xFFFFFFFF.
Que tipo de erro de programação provoca isso? é intencional para obter o programa para falhar quando algo dá muito errado?
Solução
Definitivamente não "intencional para fazer o programa falhar quando as coisas dão muito errado" - eles tinham acabado de chamar seu equivalente linguagem da saída (código_erro) para que ... você não quer saltar aleatoriamente em algum lugar na memória para causa que deixe de funcionar.
Basicamente isso significa que o programa está a tentar ler um fora local de memória do intervalo permitido pelo sistema operacional.
Isto requer algum tipo de conceito ponteiro na língua, e o endereço de memória no ponteiro está se preparando para um valor ruim. Isso pode ser causado por algo como esquecer de definir o valor do ponteiro de ser um endereço de um int ele está apontando para e em vez definindo-o como o valor o int detém. Isto poderia ser por causa de manipulação de dados / input ruim - você faz uma matriz que pode conter 256 bytes - e, em seguida, ler 265 - e isso só acontece que um valor de ponteiro estava no local de memória após a matriz, então agora dados que ' derramado sobre' o fim da matriz está no local de memória onde um ponteiro foi - tão próxima vez que você acessar esse ponteiro - é cheia de alguns dados aleatórios, mas ele é tratado como um endereço de memória. (Fazer isso propositadamente para corte é chamado de 'buffer overflow ataque').
Outras dicas
Dereferencing um ponteiro nulo (um erro muito comum) pode causar este em alguns idiomas.