Seite 3 von 3

Re: Schreibfehler an Adresse 46 im RAM?

Verfasst: 10.03.2011 04:51
von STARGÅTE
Nein, Genau so ist es falsch!

Dim Pointer.Beispiel(100)

erzeugt dir ein Array mit Felder der größe der Struktur Beispiel! (hier also 12 Bytes, statt wie bei mir 4) (32Bit Modus)

Außerdem erzeugst du an dieser Stelle:
Pointer(50) = @Beispiel1
In Pointer(50) eine komplette Kopie vom Speicher von Beispiel1

eine änderung in Beispiel1 hätte also keine Auswirkung auf Pointer(50)

Vergleich:

Code: Alles auswählen

Structure Beispiel
  String.s
  Long.l
  Float.f
EndStructure

Beispiel1.Beispiel\String = "Hallo Welt"

Dim Pointer.Beispiel(100)

Debug @Pointer(1)-@Pointer(0)

Pointer(50) = @Beispiel1

Beispiel1.Beispiel\String = "Oh Oh"

Debug Pointer(50)\String 

Code: Alles auswählen

Structure Beispiel
  String.s
  Long.l
  Float.f
EndStructure

Beispiel1.Beispiel\String = "Hallo Welt"

Dim *Pointer.Beispiel(100)

Debug @*Pointer(1)-@*Pointer(0)

*Pointer(50) = @Beispiel1

Beispiel1.Beispiel\String = "Oh Oh"

Debug *Pointer(50)\String 
Jetzt aber überzeugt oder :wink: ?

BTW: Gut Nacht

Re: Schreibfehler an Adresse 46 im RAM?

Verfasst: 10.03.2011 19:04
von NicTheQuick
Ich glaube für ts-soft war es etwas spät heute Nacht. Ich verstehe seine Probleme auch nicht. Fest steht, dass STARGÅTE Recht hat. Es ist ein Array von Pointern. Kein Pointer auf ein Array.

Im Übrigen kann ich bestätigen, dass das Setzen eines Null-Characters in der Mitte eines Strings keine Probleme macht. Der allozierte Speicher wird nicht automatisch gekürzt. Sonst müsste man ja immer Schauen, wann wo ein Null-Byte gesetzt wird, welcher allozierte Speicher davon betroffen ist, dann schauen, ob das ein Nullterminierter String ist, und in dem Fall den Speicher automatisch kürzen. Das ist doch Quark. Erst wenn der betroffene String wieder von einer Stringfunktion benutzt wird, fällt auf, dass er kürzer ist als der dafür allozierte Speicher.

Hier noch ein Beispiel von mir:

Code: Alles auswählen

;10-Elementiges Array von Pointern auf Doubles
Dim *Array1.Double(9)

;Pointer auf Array von Doubles
Structure DoubleArray
	d.d[0]
EndStructure
*Array2.DoubleArray

;Pointer auf Array von Pointern auf Doubles
Structure DoublePointer
	*d.Double[0]
EndStructure
*Array3.DoublePointer

;Beispiel

;10-Elementiges Double-Array anlegen
Dim Doubles.d(9)

;Array füllen
For i = 0 To 9
	Doubles(i) = 1.0 / (i + 1)
Next

;Jeden Double-Wert mit *Array1 verknüpfen
For i = 0 To 9
	*Array1(i) = @Doubles(i)
Next

;*Array2 mit Doubles verknüpfen
*Array2 = @Doubles()

;*Array3 mit *Array1 verknüpfen
*Array3 = @*Array1()

;Doubles über *Array1 ausgeben
Debug "*Array1:"
For i = 0 To 9
	Debug *Array1(i)\d
Next
Debug ""

;Doubles über *Array2 ausgeben
Debug "*Array2:"
For i = 0 To 9
	Debug *Array2\d[i]
Next
Debug ""

;Doubles über *Array3 ausgeben
Debug "*Array3:"
For i = 0 To 9
	Debug *Array3\d[i]\d
Next
Debug ""