Autor Beitrag
VampireSilence
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109
Erhaltene Danke: 5


C# (VS 2008 Express), PHP/MySQL, Windows XP
BeitragVerfasst: Di 11.10.11 19:08 
Hallo Zusammen,

ich hätte da mal eine relativ simple Frage, die sich mir aber nicht ganz erschließt. Wenn ich eine Funktion oder einen Code-Abschnitt als unsafe deklariere, kann ich dort in C# Pointer einsetzen. Aber wieso werden Pointer überhaupt als unsicher angesehen ? Ich meine in C ist der Umgang damit doch schließlich auch Gang und Gebe.

mfg
- VampireSilence
pdelvo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 55
Erhaltene Danke: 11



BeitragVerfasst: Di 11.10.11 19:30 
user profile iconVampireSilence hat folgendes geschrieben Zum zitierten Posting springen:
Hallo Zusammen,

ich hätte da mal eine relativ simple Frage, die sich mir aber nicht ganz erschließt. Wenn ich eine Funktion oder einen Code-Abschnitt als unsafe deklariere, kann ich dort in C# Pointer einsetzen. Aber wieso werden Pointer überhaupt als unsicher angesehen ? Ich meine in C ist der Umgang damit doch schließlich auch Gang und Gebe.

mfg
- VampireSilence


Mit Pointern bekommst du ein starkes Werkzeug, mit dem man ziemlich viel machen kann. Man kann aber auch ziemlich viel kaputt damit machen. Pointer sind für die meisten Dinge in .net überflüssig. Wenn man mit pointern arbeitet verliert man sehr viel Sicherheit, die man durch .net erhält. Und damit man das nicht als C-Programmierer macht, und die Gewohnheiten fortsetzt muss man solchen Code in unsafe Blöcke stecken. Außerdem verlangen Pointer Operationen feste Speicherbereiche, wo die Daten liegen. Das ist generell in .net nicht gegeben. Die Runtime schiebt die aten hin und her, so, wie sie am besten passen. Deswegen auch zB das fixed Schlüsselwort um das verschieben zu verhindern. Damit stellt man sich selbst ein Bein, indem man der Runtime verbietet zu Optimieren. Das ist nicht im Sinne des Erfinderst. Und um zu bestätigen, dass du dir darüber im klaren bist braucht man das unsafe Schlüsselwort und muss mit /unsafe kompilieren

Für diesen Beitrag haben gedankt: VampireSilence
VampireSilence Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109
Erhaltene Danke: 5


C# (VS 2008 Express), PHP/MySQL, Windows XP
BeitragVerfasst: Di 11.10.11 20:58 
Ok, dann ist das in der Tat sinnvoll. Danke, jetzt geht mir ein Licht auf !

mfg
- VampireSilence
Dr. Hallo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Mi 12.10.11 10:59 
Zitat:
Aber wieso werden Pointer überhaupt als unsicher angesehen ?

Ein Pointer ist ein zeiger auf eine bestimmte Speicheradresse. Gefährlich wird es dann, wenn dein Pointer auf einen nicht definierten Bereich im Speicher zeigt (also auf einen nicht von deinem Programm alloziierten bereich) und dort Werte verändert. Wenn dieser Speicherort von keinem anderen Prozess gerade benutzt wird ist das kein Problem. Andernfalls kannst du damit sogar Windows zum absturz bringen. Du musst also zb bei einer schreibenden abarbeitung eines Arrays über einen Pointer genau darauf achten, dass die durch das Array gegebenen Speichergrenzen nicht überschritten werden.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4803
Erhaltene Danke: 1060

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 12.10.11 11:13 
Hallo Dr. Hallo,

Zitat:

Wenn dieser Speicherort von keinem anderen Prozess gerade benutzt wird ist das kein Problem. Andernfalls kannst du damit sogar Windows zum absturz bringen.

Das ist nicht richtig, denn Windows verwendet natürlich "Virtual Memory", d.h. auf andere Prozesse kann man nicht direkt (mit einem Zeiger) zugreifen.
Dr. Hallo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Mi 12.10.11 11:21 
Ok, danke für die Aufklärung. Irgendwo hatte ich mal gelesen, dass das passieren kann, weiss aber nicht mehr unter welchen Umständen genau.

EDIT: hier hab ichs gelesen, das bezog sich also auf 16 Bit Systeme
openbook.galileocomp...7b50d184e8f79ab4674b