CriandoBits
Identifique-se Entrar Esqueceu a senha? Esqueci minha senha

C# - Modo unsafe

Por Benedito Silva Júnior - publicado em 19/05/2016


Qualquer programador em C ou C++ sabe o quanto pode ser útil a utilização de ponteiros, por isso mesmo C# sendo uma linguagem muito segura nos fornece essa possibilidade de trabalhar com ponteiros, ai que entra o código inseguro no C#.

Apesar do nome "código inseguro", isso não significa que seja um código perigoso, ou então um código não confiável, na realidade trata-se apenas de um código na qual em tempo de execução a plataforma .Net não controla a alocação e a desalocação de memória.

Esse é um dos grandes motivos pela utilização de ponteiros ser chamada de código inseguro, imagine se programador alocar vários megabytes de memória e esquecer de desalocar toda essa quantidade de memória usada, poderia se tornar uma catástrofe para qualquer aplicação.

Veja:

class Program { unsafe static void Main(string[] args) { Console.Clear(); int limite1 = 4; int limite2 = 8; int* pi; //ponteiro não inicializado Console.WriteLine("Valor de limite1: " + limite1); Console.WriteLine("Valor de limite2: " + limite2); //p1 armazena o endereço de limite1 pi = &limite1; Console.WriteLine("Valor de limite1 via operador '*': " + *pi); //p1 armazena o endereço de limite2 pi = &limite2; Console.WriteLine("Valor de limite2 via operador '*': " + *pi); //altera o valor de limite2 *pi = 25; Console.WriteLine("Valor de limite2 via operador '*': " + *pi); //exibe o endereço de memória de limite2 Console.WriteLine("Endereço de memória de limite2: " + (uint)pi); /* Um ponteiro pode apontar para um objeto de um tipo estrutura, pois uma estrutura é um tipo value. E o acesso aos seus membros, via ponteiro, é feito pelo operador -> */ dados d1 = new dados(); dados* p; //ponteiro para um valor do tipo dados p = &d1; //ponteiro acessa o membro valor1 da estrutura dados e atribui um valor a ele p->valor1 = 10; p->valor2 = 20; int produto = p->Mult(); Console.WriteLine("Produto: " + produto); Console.ReadLine(); } } struct dados { public int valor1, valor2; public int Mult() { return valor1 * valor2; } }


 
Voltar a pagina anteriorVoltarSubir ao topo da páginaTopo