Bad Use Of Pointers In Csharp
The code
We create a small program that creates an array with four integers. Inside it we use a C-style pointer and print items outside of our array. This is ok since it we are using the keyword unsafe.
public class Program { unsafe public static void Main() { // Create an array of 4 integers. int[] array = new int[4]; for (int i = 0; i < 4; i++) array[i] = i * i; Console.WriteLine("Display 6 items (oops!):"); fixed (int* ptr = array) for (int j = 0; j < 6; j++) Console.WriteLine(*(ptr + j)); Console.WriteLine("Display all items:"); foreach (int k in array) Console.WriteLine(k); // this throws an exception upon compilation // Console.WriteLine(array[54]); } }
Compilation
We must use /unsafe when compiling.
csc /unsafe illegal_array.cs
Output
As you might have guessed this is bad use of pointers. The fifth and sixth value printed are (I guess) pretty random. With a little bit of luck the .NET platform might store some extra information somewhere around the object - but where that information is (if is it before/after the object (or somewhere completely different) I do not know. Also the location will/might most likely change with different versions of .NET.).
>illegal_array.exe Display 6 items (oops!): 0 1 4 9 0 2031066136 Display all items: 0 1 4 9
This page belongs in Kategori Programmering.