AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Vorsicht! statisches Array mit Startindex>0
Thema durchsuchen
Ansicht
Themen-Optionen

Vorsicht! statisches Array mit Startindex>0

Ein Thema von Photoner · begonnen am 27. Feb 2015 · letzter Beitrag vom 1. Mär 2015
Antwort Antwort
Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 27. Feb 2015, 14:20
Du kannst bei den Optionen die Bereichsprüfung einschalten, dann schmeisst dir der Compiler um die Ohren und schwups ist der brand gelöscht (hat es gebrannt?)
Danke für den Hinweis. Jetzt weiß ich dass es beim Anlegen von neuen Projekten aus ist. (Lässt sich aber bestimmt einstellen)

Brandgefährlich ist es auch ein Sprung vom 5-Meter-Turm ohne sich vergewissert zu haben, dass sich ausreichend Wasser im Becken befindet

Warum dieser Sarkasmus? Habe ich was falsches gemacht als ich das für andere Programmierende, die auch nicht so viel Erfahrung haben wie ihr, erwähnt habe?
Denk mal darüber nach wie viel Spaß das aktive Teilnehmen im Forum noch für Anfänger macht wenn sich die Altherrenrunde über mich und andere so lustig macht.



Delphi-Quellcode:
type
   TA : Array of Ansichar;
   TB : Array [0..200] of Ansichar;
emm nicht dein Ernst....


  Move(S[1],A,length(S));
Sollte wohl eher so aussehen:
Move(S[1],A[0],length(S)); und was willst du damit sagen?
Chris
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 27. Feb 2015, 14:28
Sollte wohl eher so aussehen:
Move(S[1],A[0],length(S));
Ach wieso den?

Move(S[1],B,length(S)); Funktioniert doch...
und was willst du damit sagen?
SO eine Änderung ist brachgefährlich...

Eigentlich müsste es bei Dynamischen Array immer mit ^ geschrieben werden, da es sich nicht mehr um Speicherbereich handelt,
sondern plötzlich um einen "Zeiger"...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.658 Beiträge
 
Delphi 12 Athens
 
#3

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 27. Feb 2015, 14:47
SO eine Änderung ist brachgefährlich...
Eigentlich ist das MOVE gefährlich, da es nicht typ-sicher ist. Deshalb muss man bei der Verwendung von solchen Low-Level-Dingen halt besonders aufpassen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.384 Beiträge
 
Delphi 12 Athens
 
#4

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 27. Feb 2015, 16:23
Eigentlich ist das MOVE gefährlich, da es nicht typ-sicher ist. Deshalb muss man bei der Verwendung von solchen Low-Level-Dingen halt besonders aufpassen.
Dafür gibt es ja inzwischen z.B. TArrayManager<T>.Move / TMoveArrayManager<T>.Move
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#5

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 28. Feb 2015, 14:31
Eigentlich müsste es bei Dynamischen Array immer mit ^ geschrieben werden, da es sich nicht mehr um Speicherbereich handelt,
sondern plötzlich um einen "Zeiger"...
Dann müsstest du auch strings immer mit ^ schreiben, denn die sind nichts anderes als dynamische Arrays of Char.

Also ich bin froh, dass man ^ mittlerweile in vielen Fällen (z.B. Zugriff auf Felder eines Record-Pointers) weglassen kann.


Na wer findet die Exception?
Also wenn schon, dann richtig:
Delphi-Quellcode:
uses
  System.Math;

type
  TA = Array of AnsiChar;
  TB = Array [0 .. 200] of AnsiChar;

var
  A: TA;
  B: TB;
  S: ShortString;

begin
  S := 'Cooler Text';
  SetLength(A, 201);

  Move(S[Low(S)], A[Low(A)], Min(Length(S) * SizeOf(S[Low(S)]), Length(A) * SizeOf(A[Low(A)])));
  Move(S[Low(S)], B[Low(B)], Min(Length(S) * SizeOf(S[Low(S)]), Length(B) * SizeOf(B[Low(B)])));
end;
So funktioniert es mit statischen und dynamischen Arrays, unabhängig vom Startindex. Nur nicht mit ShortString, weil Low() hier eben 0 liefert und damit nach dem Move #11'CoolerTex' in A und B steht. Besoders schön / leserlich ist solcher Code natürlich auch nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 1. Mär 2015, 01:03
Dann müsstest du auch strings immer mit ^ schreiben, denn die sind nichts anderes als dynamische Arrays of Char.
Nur wenn es keine Shortstrings sind... Da sich bei einem ShortString wieder Speicher dahinter "versteckt"

Also wenn schon, dann richtig:
Es ging nicht darum es richtig zu machen, sondern eine "möglichen" Fehlerquelle auf zu zeigen...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 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