Moin,
ich habe hier das Phänomen in C#, dass ich Access Violation Fehler erhalte.
Man sehe sich bitte folgendes Beispiel an:
In Zeile 14, also dem AddRange bricht meine Anwendung ab mit Access Violation.
Auch wenn ich beim Debuggen im Befehlsfenster ein ? t.Count() absetze kracht es. Da kommt dann ein StackOverflow, also möglicherweise eine Endlosschleife??
Ich kapier grad nix. Da scheint doch intern irgendwas durch den Wind, oder?
Kennt jemand eine solche Situation und hat einen Tipp was das Problem sein könnte. VS habe ich schon repariert.
Noch zur Info:
Gruß
MQ
ich habe hier das Phänomen in C#, dass ich Access Violation Fehler erhalte.
Man sehe sich bitte folgendes Beispiel an:
C#-Quellcode
- private void BereinigenSpeicherOhneKomplement()
- {
- List<Zug> nächste = new();
- IEnumerable<Zug> collection = züge[maxzug];
- for(int loop = maxzug; maxzug >= startzug; loop--)
- {
- nächste.Clear();
- foreach(var item in collection)
- {
- IEnumerable<Zug> tmp = züge[loop - 1];
- var t = tmp.Where(xx => item.Vorgänger == xx.Stellung);
- nächste.AddRange(t);
- }
- züge[loop].Clear();
- collection = nächste;
- }
- }
In Zeile 14, also dem AddRange bricht meine Anwendung ab mit Access Violation.
Auch wenn ich beim Debuggen im Befehlsfenster ein ? t.Count() absetze kracht es. Da kommt dann ein StackOverflow, also möglicherweise eine Endlosschleife??
Ich kapier grad nix. Da scheint doch intern irgendwas durch den Wind, oder?
Kennt jemand eine solche Situation und hat einen Tipp was das Problem sein könnte. VS habe ich schon repariert.
Noch zur Info:
C#-Quellcode
- internal class Zug
- {
- public Stellung Vorgänger { get; set; }
- public Stellung Stellung { get; set; }
- public Zug(Stellung vorgänger, Stellung stellung)
- {
- Vorgänger = vorgänger;
- Stellung = stellung;
- }
- public static implicit operator ZugEntity(Zug zug) { return new() { Stellung = zug.Stellung, Vorgänger = zug.Vorgänger }; }
- public static implicit operator Zug(ZugEntity e) { return new(e.Vorgänger, e.Stellung); }
- }
- internal class Stellung
- {
- private long _content;
- public long Content => _content;
- public Stellung(long content)
- {
- _content = content;
- }
- public static implicit operator Stellung(long l) => new Stellung(l);
- public static implicit operator long(Stellung p) => p._content;
- public static bool operator ==(Stellung p1, Stellung p2) => p1.Equals(p2);
- public static bool operator !=(Stellung p1, Stellung p2) => !p1.Equals(p2);
- public override bool Equals(object obj) { return object.Equals(obj, this); }
- public override int GetHashCode() { return _content.GetHashCode(); }
- public static Stellung StartStellung => new Stellung (((long)1 << 33) - 1);
- }
züge
wird über Parallel.ForEach
gefüllt und da List<>
oder ähnliche Typen nicht threadsicher sind, muss es ein SynchronizedCollection
sein. Ob aber das die Probleme verursacht, kann ich nicht sagen.Gruß
MQ