Почему в отладке данный код ломается. При том если не ставить точек остановки то все Ок. Как такое может быть? При том только
в отладке с точкой остановки в определенном месте.
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public unsafe static int* getAddrNoShift(nint mem, int offset)
{//mem = 0x0000000000 (хотя по стеку выше было верное значение.
//Только в отладке и только с точкой остановки(не тут а на вызове по стеку, ниже функция)
return (int*)((byte*)mem + (offset ));
}
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
public unsafe static int testFibUnsafeNotShift(nint arrUnsafe, int n)
{
// вот тут если поставить точку остановки то все ломается, А если внутри getAddrNoShift то все ок
*getAddrNoShift(arrUnsafe, 0) = 0;
*getAddrNoShift(arrUnsafe, 4) = 1;
// а если тут поставить то все норм, магия
n *= 4;
for (int i = 8; i < a; i+=4)
{
*getAddrNoShift(arrUnsafe, i)
= *getAddrNoShift(arrUnsafe, i - 4) + *getAddrNoShift(arrUnsafe, i - 8);
}
return *getBAddrNotShift(arrUnsafe, n - 4);
}
// arrUnsafe = Marshal.AllocCoTaskMem(n*4);
Что это за ошибка, просто ошибка vs, или вдруг может всплыть?