Autor Beitrag
derpfarrer
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 03.08.10 19:58 
Hallo Leute!

Ich habe ein kleines Problem mit einer speicherverletzung beim Debugdaten auslesen.
Code ist in C#.

Hier die Struktur




ausblenden C#-Quelltext
1:
2:
3:
4:
5:
   unsafe public struct str_DebugOut
    {
      public uint* Status;
      public Int16* Analog;   // Debugwerte
    };



soll die DebugStruktur repräsentieren, die die FC zurücksendet.

Hier die deklaration meines Zeigers auf die Struktur





ausblenden C#-Quelltext
1:
      public static str_DebugOut* DebugOut;					



und hier der Aufruf und das Auslesen




ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
            }else if(is_send && send_buff[2] == (byte)'d'){
                int[] result = MicroLibrary.SerialData.decode64(port.ReadExisting().ToCharArray(), 312);     //Decode gibt ein 48 Byte in Form eines Integerarrays zurück
            
                fixed (int* pRxData = &result[1]) { 
                    byte* firstbyte = (byte*)pRxData;    //firstbyte symbolsiert das erste Byte der Struktur die man von der FC zurückbekommt. (d.h das 4. Byte des der gesamten Rückgabe der FC)
                    DebugOut = (str_DebugOut*)firstbyte;      //DebugOut ist der Zeiger der nun auf das das erste Byte zeigt

               
               /****** Hier passiert der Fehler "Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben."  (AccessViolationException)**********/  
                    Console.WriteLine(DebugOut->Analog[1]); //Beispielweise soll nun auf die Analogdaten zugegriffen werden
               /***********************************************************************************************/          
                

                };
                is_send = false;  

            }



Auf unzähligen Foren und Websites suche ich nun schon nach der Lösung dieses Problems.

Vielleicht fällt euch was dazu ein?
Mir wäre echt geholfen für jede Antwort von euch!

Danke schon im voraus!

Freundliche Grüße
Patrick

Moderiert von user profile iconKha: Quote- durch C#-Tags ersetzt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 03.08.10 20:37 
:welcome:

Dass das mit den Pointern nicht stimmen kann, wurde ja bereits geschrieben...
Schau dir einmal Marshal.PtrToStructure an, damit kannst du den Buffer in ein Struct umwandeln. Im Beispiel sind auch gleich die nötigen Attribute angegeben, damit die Array-Daten direkt aus dem Buffer genommen und nicht als Pointer interpretiert werden.

_________________
>λ=