Pointerübergabe und Changecurrentelement

Für allgemeine Fragen zur Programmierung mit PureBasic.
Serge
Beiträge: 66
Registriert: 20.09.2004 20:44
Kontaktdaten:

Pointerübergabe und Changecurrentelement

Beitrag von Serge »

Ich habe eine Struktur, die unter anderem einen Pointer beinhaltet,
z. B. "*link"
Wie spräche ich diese Variable denn nun an?
(oder ist es denn garnicht erlaubt pointer in einer Struktur zu haben?)

Code: Alles auswählen

structure test
  variable.l
  *link
endstructure

newlist tlist.test()
addelement(tlist())

newlist tlist2.test()
addelement(tlist2())

tlist()\*link = @tlist2()  ; <-- gibt mir eine Fehlermeldung!
und noch was:
Wenn ich mit "Changecurrentelement" ein Element anspreche, das garnicht mehr existiert, was passiert dann? Gibt es einen Absturz, oder wird das aktuelle element -1?
Wenn das erstere der Fall ist, gibt es da eine möglichkeit davor zu überprüfen ob das element denn existiert?
Serge
Beiträge: 66
Registriert: 20.09.2004 20:44
Kontaktdaten:

Beitrag von Serge »

das erste problem hat sich gelöst,

tlist()\link = @tlist2()

heisst es richtig.

edit:
Die zeite Frage hat sich auch erledigt,
das "currentelement" wird dann lediglich zu -1, wenn das Element auf das der Pointer zeigt nicht mehr existiert.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Serge hat geschrieben:das erste problem hat sich gelöst,

tlist()\link = @tlist2()

heisst es richtig.
Das ist nicht korrekte PB-Syntax, sondern funktioniert nur
weils ein Bug ist.

Code: Alles auswählen

Structure xyz
  *link.LONG
   link.l
Endstructure

a.xyz
a\link = @i
a\link\l = 12

Debug a\link\l
Welches "link" nimmt er hier? Das Erste, den Pointer - und
der Code funktioniert somit.
Vertauschst Du die 2 Struktureinträge, geht es nicht mehr: Fehler.

Solltest Du nur in Zukunft beachten, falls es doch noch in
den nächsten Jahren gefixt wird und der PB-Syntax für Pointer
angepasst wird (Fred sagte mir vor einer Ewigkeit das er es
fixen wird, d.h. Dein Code läuft dann nicht mehr. Nur sagte
er nicht wann... :cry:).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

@Danilo: dann werde ich mal versuchen, bei der ganzen Sache wieder etwas Druck zu machen. :wink:
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Serge
Beiträge: 66
Registriert: 20.09.2004 20:44
Kontaktdaten:

Beitrag von Serge »

Ne kannst es ruhig lassen, sonst geht mein Code nimmer *g*
@Daniello:
Wie wäre denn der korrekte PB-syntax? Oder gibts nur diese "buggy" möglichkeit?
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Serge hat geschrieben:Wie wäre denn der korrekte PB-syntax?
In PB werden Pointer *immer* mit dem Sternchen davor geschrieben.
Serge hat geschrieben:Oder gibts nur diese "buggy" möglichkeit?
Ja, bis es gefixt ist schon. Wollte Dich nur auf das Problem
hinweisen, dann weißt Du gleich bescheid wenn Dein Programm
dann irgendwann mal einen Fehler bringen sollte.
Brauchst dann nur bei allen Pointern ein Sternchen davor setzen, fertig.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Oh, scheiße!

Wenn das geändert wird, kann ich tausende von Codezeilen in hunderten Quellcodes ändert, weil ich das nie anders gemacht habe.

Wieso wird einem das denn nicht früher gesagt?? :evil: :evil: :evil: :evil:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

schreib dir dochn kleines prog...

idee:

das prog hechelt den source durch, und notiert jeden namen, den es mit sternchen davor findet in 'ner liste...

...wenn es einen dieser namen ohne sternchen findet, setzt es eins davor..

... könnte man in so ne art byte-für-byte-Kopiervorgang packen... :wink:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

NicTheQuick hat geschrieben:Wieso wird einem das denn nicht früher gesagt??
Du weißt doch genau das PB-Pointer immer mit einem Sternchen
anfangen.

Bei einer Änderung sagt Dir aber PB wo genau ein Fehler ist.
Schliesslich mußtest Du den Pointer in der Struktur mit '*'
deklarieren:

Code: Alles auswählen

Structure xyz
  *p.LONG
EndStructure
Wenn dann im Code irgendwo sowas kommt:

Code: Alles auswählen

var.xyz
var\p = AllocateMemory(4)
...dann sagt Dir PB das es keinen StrukturMember "p" gibt,
und die änderst es in

Code: Alles auswählen

var\*p = AllocateMemory(4)
Da dieser Fehler dann eindeutig ist, sollte es kein großes
Problem sein. Man weiß ja dann schliesslich auch was sich
großartig geändert hat.
Der jetzige Zustand ist alles andere als korrekt und schön.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Serge
Beiträge: 66
Registriert: 20.09.2004 20:44
Kontaktdaten:

Beitrag von Serge »

Probleme gibts dann nur wie in dem obigen von dir aufgeführtem Beispiel,
wenn die Strukur eine Variable p.l und einen Pointer *p beinhaltet :]
Antworten