Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Parameter oder Konstanten sind nur in unsicheren Prozeduren (https://www.delphipraxis.net/105678-parameter-oder-konstanten-sind-nur-unsicheren-prozeduren.html)

malibu85 27. Dez 2007 12:39


Parameter oder Konstanten sind nur in unsicheren Prozeduren
 
Hallo ich muss für eine Klausur, etwas über Zeiger und Pointer wissen. Leider kan ich die Programmierbeispiel vom Doc nicht nachmachen, da ich folgende Fehlermeldung beim compileren erhalte:
[Pascal Fehler] Unit1.pas(42): E2410 Unsichere Zeigervariablen, Parameter oder Konstanten sind nur in unsicheren Prozeduren zulässig.
Habe mit den Compilerbefehlen {$UNSAFECODE ON} und {$T+} versucht diese Sperre zu umgehen aber hat nicht funktioniert.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Borland.Vcl.StdCtrls, System.ComponentModel;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  Type T_Stoffe = Record

       Aluminium :real;
       Eisen    :real;
       Silber   :real;
       Kupfer   :real;
       Zinn     :real;

  End;

var
  Form1: TForm1;



implementation

{$R *.nfm}
{$T+}
{$UNSAFECODE ON}



procedure TForm1.Button1Click(Sender: TObject);

var Zeiger_T_Stoffe:^T_Stoffe;

begin

new(Zeiger_T_Stoffe);




end;

end.


wie man sieht nichts spannendes. Das steht in jedem Kapitel über Zeiger drin aber leider nichts über den Sicherheitscode und ddessen Einstellungen. Liegt bestimmt an .net?

Jürgen Thomas 27. Dez 2007 12:57

Re: Parameter oder Konstanten sind nur in unsicheren Prozedu
 
Hallo,

bist Du sicher, dass die Kenntnisse über Zeiger/Pointer im Zusammenhang mit Delphi.NET gefragt sind? Dadurch, dass NET vollständig objektorientiert, also immer mit Klassen arbeitet, spielen Zeiger zumindest in der Praxis keine Rolle. Deshalb verstehe ich Deinen Code an dieser Stelle nicht.

Aber bitte nicht wundern; das kann auch mein Problem sein - siehe meine Signatur. Jürgen

FAlter 27. Dez 2007 13:15

Re: Parameter oder Konstanten sind nur in unsicheren Prozedu
 
Hi,

versuchs mal unter Delphi für Win32.

Wenn du nicht gesagt hättest, dass es für die Schule sein sollte, hätt ich dir zu Klassen statt Zeigern geraten. Ich hab es immerhin geschafft, mit meinem Lehrer auszuhandeln, dass ich statt eines Zeigeransatzes wie bei allen anderen Klassen werwenden durfte, um Liste, Baum usw. zu implementieren. Gleich "richtiges" OOP zu nehmen konnte ich ihn nicht überzeugen.

(Warum muss eigentlich nach Leheremeinung jeder die gesamte Evolution von der Programmierer durchmachen? Wäre doch sinnvoller, gleich mit dem modernen anzufangen. Ich hab Records und Zeiger erst kennengelernt, als ich schon längst mit Klassen vertraut war, und geschadet hats nicht.)

Aber Zeiger unter .NET? Sind doch allerhöchstens noch für P/Invoke wichtig, oder?

Mfg
FAlter

malibu85 27. Dez 2007 13:22

Re: Parameter oder Konstanten sind nur in unsicheren Prozedu
 
ja da hast du recht. Es werden keine Fragen im Zusammenhang mit zeigern und delphi.net geben. Ich habe nur erstmal versucht, einfache zeiger zu implementieren weil ich später was mit listen machen möchte. Listen und Zeiger sind bei uns in dem fach Algorithmen und datenstruckturen drin und auf jeden fall thema der klausur. da hätte man es in cleichter aber wir programmieren in objrct pascal. Ich denke mal, dass ich dann eine win32 version verwenden müßte oder?

malibu85 27. Dez 2007 13:28

Re: Parameter oder Konstanten sind nur in unsicheren Prozedu
 
@Falter...Zeiger muss man schon beherrschen..im Zusammenhang mit Listen und Bäume auf alle fälle. Vielleicht ist es in delphi weniger von Bedeutung aber ich denke in C/C++ und vor allem bei Systemprogrammierung unter unix ist das schon wichtig. Aber danke für deinen Tipp. Ich versuche es mal mit der Win32 -Version.

FAlter 27. Dez 2007 14:00

Re: Parameter oder Konstanten sind nur in unsicheren Prozedu
 
Hi,

bitte versteh mich so:

Ich bin kein Zeigergegner, sondern ein Lehrplankritiker.

Und: ich habe Zeiger bereits beherrscht, bevor wir sie in der Schule hatten. Ich finde eben nur, es wäre besser, wenn wir in der Schule schon längst OOP angefangen hätten, statt uns damals mit Zeigern zu quälen und dann mit (Parkschein)Automaten.

Mfg
FAlter

Bernhard Geyer 27. Dez 2007 14:12

Re: Parameter oder Konstanten sind nur in unsicheren Prozedu
 
Zeiger gibt es eigentlich auch unter Java/.NET noch jedoch sind diese immer typgebunden und werden Referenzen genannt und können nicht mal auf "irgendwas" zeigen (so wie in C/C++ üblich das man einen void-Pointer zurückgibt der einmal eine Record, einmal ein integer und einmal eine Klasse repräsentieren kann). Die Laufzeitumgebung muß immer wissen auf welche Instanz wieviel Zeiger (äh Referenzen) noch verweisen und was in den Abfalleimer wandern kann (Garbage Collection). Auch muß verhindert werden das man wild mit Zeigerarithmetik operiert (Knieschuss-Operationen) und dann versehentlich über irgendwelche Gültigkeitsbereiche hinauszeigt.

Dein Problem dürfte sein das die New-Funktion/Prozedur genau so einen "Zeiger auf irgendwas" zurückliefert. Ich denke auch das diese Funktion in der Liste der Funktionen/Prozeduren steht die unter .NET bei Delphi nicht mehr gehen und für einen .NET-Port umgebaut werden müssen. Hier wäre in deinem beispiel ein TObject statt eines Records das einfachste.

malibu85 27. Dez 2007 15:53

Re: Parameter oder Konstanten sind nur in unsicheren Prozedu
 
also der quellcode hat eigentlich keinen sinn. Ich habe vorher noch nicht in delphi progrmmiert und wollte mich in der Klausur auch nur auf die allgemeinen theoriefragen der Informatik zuwenden. Der Quellcode war nur ein kleiner compilertest um zu sehen ob ich ein paar syntktische Grundlagen beherrsche. Habe jetzt eine Win32-version und da funktionirt alles. Ich habe mich mal ein bisschen zum thema .net programmierung bei wikipedia ngelesen. Bisher ist dieser Trend wohl an mir vorbei gegangen. Ich weiß jetzt nicht ob das das richtige forum dafür ist aber inwiefern hat das Zukunft? Ich meine Java ist auch plattformunabhängig. Wozu .net?

FAlter 27. Dez 2007 15:55

Re: Parameter oder Konstanten sind nur in unsicheren Prozedu
 
Hi,

Zitat:

Zitat von Bernhard Geyer
Dein Problem dürfte sein das die New-Funktion/Prozedur genau so einen "Zeiger auf irgendwas" zurückliefert.

Falsch. New funktioniert nur bei typisierten Zeigern. Es handelt sich nicht um eine "echte" Prozedur, sondern New(A) macht ungefähr soviel wie GetMem(A, SizeOf(A^)), also es reserviert genau so viel Speicher, wie nötig. Mit einem untypisierten Zeiger funktioniert es gar nicht. (Das einzige, was ich gelernt habe, als wir Zeiger hatten, war New; ich habe vorher statt New und Dispose immer GetMem und FreeMem genommen und nehme es auch heute noch bevorzugt.)

Zitat:

Ich denke auch das diese Funktion in der Liste der Funktionen/Prozeduren steht die unter .NET bei Delphi nicht mehr gehen und für einen .NET-Port umgebaut werden müssen.
Schätz ich auch.

Zitat:

Hier wäre in deinem beispiel ein TObject statt eines Records das einfachste.
Nur, dass er eben gerade Zeiger lernt und nicht Klassen.

Mfg
FAlter

malibu85 27. Dez 2007 16:03

Re: Parameter oder Konstanten sind nur in unsicheren Prozedu
 
aber so ganz kann ich die verwendung von Zeigern nicht verstehen.Jedenfalls in Delphi. In C kannst du mit Zeigern super eine Parameterübergabe erzeugen. aber liegt denn der Sinn in delphi nur darin den Speicher effizient zu verwalten?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz