AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Tmemorystream vs Object factory - Access violation
Thema durchsuchen
Ansicht
Themen-Optionen

Tmemorystream vs Object factory - Access violation

Ein Thema von Sequitar · begonnen am 17. Dez 2021 · letzter Beitrag vom 17. Dez 2021
Antwort Antwort
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#1

AW: Tmemorystream vs Object factory - Access violation

  Alt 17. Dez 2021, 16:23
Welcher Wert steht in Str.Size?
(Vor Beginn der Schleife)
Michael Justin
  Mit Zitat antworten Zitat
Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Tmemorystream vs Object factory - Access violation

  Alt 17. Dez 2021, 16:31
Welcher Wert steht in Str.Size?
(Vor Beginn der Schleife)
40, aber wenn ich richtig gezählt habe sollten es nur 34 sein?

Delphi-Quellcode:
    For J := 0 To 2 Do
      For I In ['A' .. 'C'] Do
        Str.WriteBuffer(I, Charsize); //+6
    For K In ['D' .. 'F'] Do
      Str.WriteBuffer(K, Charsize); //+3
    For I In ['A' .. 'C'] Do
      Str.WriteBuffer(I, Charsize); //+3
    For I In ['A' .. 'E'] Do
      Str.WriteBuffer(I, Charsize); //+5
VOR Der schleife: 0.
Vor der while-schleife: 40 (wie oben geschrieben)

Geändert von Sequitar (17. Dez 2021 um 16:36 Uhr) Grund: Ach VOR der schleife?
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
446 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Tmemorystream vs Object factory - Access violation

  Alt 17. Dez 2021, 16:32
Ich nehme mal an du meintest

Oughtstreamcontent[Index] := Cc; // Oughtstreamcontent: Array [0 .. 19] Of Char;
denn sonst wird das eng in dem Array...

3*3 + 3 + 3 + 5 = 20
Whookie

Software isn't released ... it is allowed to escape!

Geändert von Whookie (17. Dez 2021 um 16:35 Uhr)
  Mit Zitat antworten Zitat
Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Tmemorystream vs Object factory - Access violation

  Alt 17. Dez 2021, 17:26
Oh man, manchmal sieht man den wald vor bäumen nicht.
Einfach den Testcode zu checken - und das bei so einfachen dingen, wie array-befüllung!
Danke hierfür.

Aber es ist schon sehr verwirrend, wenn dann plötzlich an ganz unerwarteter Stelle solche Dinge auftreten und du im working code keinen Fehler entdecken kannst . Jetzt kann ich mich endlich an die Korrektur der Funktionalität des Kern-Algorithmus setzen.

Dann wäre noch eine Frage
um an das ENDE eines streams anzuhängen, wo muss ich die position setzen: mystream.size oder mystream.size-1?

Geändert von Sequitar (17. Dez 2021 um 17:35 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
718 Beiträge
 
Delphi 12 Athens
 
#5

AW: Tmemorystream vs Object factory - Access violation

  Alt 17. Dez 2021, 20:08
Oh man, manchmal sieht man den wald vor bäumen nicht.
Einfach den Testcode zu checken - und das bei so einfachen dingen, wie array-befüllung!
Danke hierfür.

Aber es ist schon sehr verwirrend, wenn dann plötzlich an ganz unerwarteter Stelle solche Dinge auftreten und du im working code keinen Fehler entdecken kannst . Jetzt kann ich mich endlich an die Korrektur der Funktionalität des Kern-Algorithmus setzen.

Dann wäre noch eine Frage
um an das ENDE eines streams anzuhängen, wo muss ich die position setzen: mystream.size oder mystream.size-1?
  mystream.Seek(0, soEnd);
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Tmemorystream vs Object factory - Access violation

  Alt 17. Dez 2021, 21:39
Schalte mal in den Projektoptionen die Index-Prüfung an .... du hast mehr Daten im Stream, als in das Array passt und du dann auf einen Index zugreifst, den es garnicht gibt.


['A' .. 'C'] ist immer ein TSysCharSet, also AnsiChar (leider gibt es kein WideCharSet)

somit dürfte I auch ein AnsiChar sein und die WriteBuffer ein Byte mehr schreiben, als es gibt ... auf dem Stack ist dort aber Speicher, womit es nicht knallt, aber quasi hast du dann ein jeweils Zufallsbyte im Stream.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (17. Dez 2021 um 21:45 Uhr)
  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 11:19 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