![]() |
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? |
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 |
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 |
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?
|
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.
|
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 |
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. |
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?
|
Re: Parameter oder Konstanten sind nur in unsicheren Prozedu
Hi,
Zitat:
Zitat:
Zitat:
Mfg FAlter |
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 04:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz