-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Description
Description
HI,
I ran into a problem were using SortedDictionary<BigInteger, MyObject> ran into a System.AccessViolationException every single time.
The error occured during an BenchmarkDotNet run.
The error does not occur in debug mode. As far as I found out the error only appeared in Release mode.
Also, the error disappears if you want to analyze the behavior with dotMemory.
Reproduction Steps
MyObject is a sealed generic class bit I think it does not matter.
public sealed class Test
{
private readonly SortedDictionary<BigInteger, MyObject> _limitSortedList;
.......
private MyObject? GetNextNode(BigInteger target)
{
if (_limitSortedList.TryGetValue(target, out Swtrse2Node<TKey, TOrder>? node)) { return node; }
var low = 0;
int high = _limitSortedList.Count - 1;
List<BigInteger> list = _limitSortedList.Keys.ToList(); //<---- Exception
while (low <= high)
{
int mid = (low + high) / 2;
int comparison = _limitSortedList.Comparer.Compare(list[mid], target);
if (comparison < 0) { low = mid + 1; }
else { high = mid - 1; }
}
return low < _limitSortedList.Count ? _limitSortedList[list[low]] : null;
}
}
Expected behavior
I expect no AccessViolationException when calling Framework functions
Actual behavior
Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at System.Collections.Generic.List1[[System.Numerics.BigInteger, System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]]..ctor(System.Collections.Generic.IEnumerable
1<System.Numerics.BigInteger>)
Regression?
No response
Known Workarounds
No response
Configuration
// BenchmarkDotNet v0.14.0
// Runtime=.NET 9.0.0 (9.0.24.43107), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX-512F+CD+BW+DQ+VL+VBMI,AES,BMI1,BMI2,FMA,LZCNT,PCLMUL,POPCNT VectorSize=256
Other information
No response