Как прочитать значение обратно из памяти в C #? - PullRequest
0 голосов
/ 21 мая 2019

Я пишу простой код C #, в котором я использую Pointer для чтения значения из ячейки памяти.Код работает нормально, когда я пытаюсь прочитать значение из того же метода, где я вставляю значение.Однако, это не работает, когда я пытаюсь получить доступ к значению вне метода.

Вот мой блок кода:

    class Program
    {
        public unsafe static int* numberPointer;
        static void Main(string[] args)
        {
            InsertValueIntoMemoryAddress();
            ReadValueFromMemoryAddress();
        }
        public unsafe static void InsertValueIntoMemoryAddress()
        {
            int number = 100;
            numberPointer = &number;
            Console.WriteLine("The value of Number is {0}", *numberPointer);
            Console.WriteLine("The address of Number is {0}", (int)numberPointer);

            IntPtr ptr = new IntPtr((int)numberPointer);
            int value = Marshal.ReadInt32(ptr);
            Console.WriteLine("Inside the same method --- The value from a Memory location {0}", value);
        }
        public unsafe static void ReadValueFromMemoryAddress()
        {
            IntPtr ptr = new IntPtr((int)numberPointer);
            int value = Marshal.ReadInt32(ptr);
            Console.WriteLine("Outside from the method -- The value from a Memory location {0}", value);
        }
    }

Вот вывод вышеупомянутой программы:

Значение Number: 100

Адрес Number: 10416820

Внутри того же метода ---Значение из ячейки памяти 100

Вне метода - значение из ячейки памяти 10416820

Может кто-нибудь помочь мне, почему он не можетпрочитать значение из адреса памяти вне метода;вместо этого он просто возвращает адрес памяти?

1 Ответ

0 голосов
/ 21 мая 2019

В связи с этим:

numberPointer = &number;

Область памяти number находится в стеке и будет освобождена после выхода из области действия метода.

...