Acabei de encontrar uma postagem de blog que menciona “memória marcante”:
um programa C ++ que é facilmente capaz de controlar a memória (algo do qual você provavelmente nunca ouviu falar se nasceu em um mundo de código gerenciado).
E na verdade nunca ouvi falar disso!
Então, o que é isso, um piscar de memória, uma memória de piscar? Quando isso ocorre?
c++
c
memory
memory-management
scravy
fonte
fonte
Respostas:
A memória é "pisoteada" quando um trecho de código manipula a memória sem perceber que outro trecho de código está usando essa memória de forma conflitante. Existem várias maneiras comuns de pisar na memória.
Um está alocando, digamos, 100 bytes de memória, mas armazenando algo além do 100º endereço. Essa memória pode ser usada para armazenar algo completamente diferente. Isso é particularmente difícil de depurar porque o problema aparecerá quando algo tentar acessar a vítima que foi pisoteada, e o código que pisou nele pode ser totalmente não relacionado.
Outra é acessar a memória depois que ela foi liberada. A memória pode ser alocada para outro objeto. Novamente, o código que mostra o problema pode estar relacionado ao objeto recém-alocado que obteve o mesmo endereço e não relacionado ao código que causou o problema.
fonte
Muitas vezes, é uma saturação de buffer; como exemplo, este código:
irá "pisar" em qualquer coisa que aconteça na próxima coisa na memória depois
buffer
. De um modo geral, 'pisotear' é quando a memória é gravada involuntariamente.fonte
Outras respostas estão basicamente corretas, mas gostaria de dar um exemplo.
Essas amostras podem levar a um loop infinito (ou não), porque é um comportamento indefinido.
Muito provavelmente a variável
i
na memória é armazenada logo após a matriz. Portanto, o acessoa[10]
poderia realmente acessar,i
em outras palavras, ele poderia redefinir o contador de loop.Acho que é um bom exemplo que demonstra "piscar" da memória.
fonte