IMA bei strukturierter LinkedList

Für allgemeine Fragen zur Programmierung mit PureBasic.
bullit611
Beiträge: 4
Registriert: 15.05.2012 17:38

IMA bei strukturierter LinkedList

Beitrag von bullit611 »

Hallo zusammen,

folgender Code bricht nicht reproduzierbar mit der Fehlermeldung "Ungültiger Speicherzugriff: Lesefehler an der Adresse xxx" ab.

Code: Alles auswählen

Structure TABLE	
  Array column.s(0)	
EndStructure

Global NewList rs.TABLE()

Procedure ExSQL(sql.s, List ll.TABLE())
  ClearList(ll())
  If DatabaseQuery(0, sql)
    While NextDatabaseRow(0)
      AddElement(ll())
      ReDim rs()\column(DatabaseColumns(0)-1)
      For i=0 To DatabaseColumns(0)-1
        ll()\column(i) = GetDatabaseString(0, i)
      Next
    Wend
  Else
    If Len(Trim(DatabaseError())) > 0
      Debug DatabaseError()
    EndIf	
  EndIf
  ResetList(ll())
EndProcedure

If UseODBCDatabase()
  If OpenDatabase(0, DSN, USER, PW)
    ExSQL("SELECT * FROM some_db;", rs())
    ForEach rs()
      buffer$ = ""
      For i=0 To ArraySize(rs()\column())
        buffer$ + rs()\column(i) + Chr(124)
      Next
      Debug buffer$
    Next	
  EndIf
  CloseDatabase(0)
EndIf

End
Habe keinen Ansatz in welche Richtung ich debuggen soll. Wäre super, wenn jemand eine Idee hat.

MfG
PureBasic 4.60 | Windows 7 SP1 (x64)
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: IMA bei strukturierter LinkedList

Beitrag von NicknameFJ »

Hallo bullit611,

Willkommen im Forum.

Bitte aber testbaren Code posten. Dein Code bringt schon beim compilieren einen Fehler ! (zumindest mit PB x86 4.60)

Code: Alles auswählen

  If OpenDatabase(0, DSN, USER, PW)

Code: Alles auswählen

---------------------------
PureBasic
---------------------------
Zeile 26: Falscher Parameter-Typ: ein String wird erwartet.
---------------------------
OK   
---------------------------
Grüße Nicknamefj
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
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

Re: IMA bei strukturierter LinkedList

Beitrag von NicTheQuick »

NicknameFJ hat geschrieben:Hallo bullit611,

Willkommen im Forum.

Bitte aber testbaren Code posten. Dein Code bringt schon beim compilieren einen Fehler ! (zumindest mit PB x86 4.60)

Code: Alles auswählen

  If OpenDatabase(0, DSN, USER, PW)
Grüße Nicknamefj
Das ist logisch. Er öffnet eine Datenbank, deren Nutzername, Passwort und IP er uns sicherlich nicht verraten wird. Ich glaube hier wird's schwer einen funktionierenden Testcode zu erstellen.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: IMA bei strukturierter LinkedList

Beitrag von ts-soft »

NicTheQuick hat geschrieben:Ich glaube hier wird's schwer einen funktionierenden Testcode zu erstellen.
Denke ich mal nicht, weil es wahrscheinlich nichts mit der DB zu tun hat. Den Testcode auf SQLite umzustellen,
sollte kein so großes Problem sein. Außerdem wäre eine Aussage über die verwendete PB Version, Bitbreite und
evtl. OS sehr hilfreich.

Bei der bisherigen Form, wird Hilfe eher nicht möglich, bzw. in Hellsehen ausarten :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: IMA bei strukturierter LinkedList

Beitrag von Danilo »

bullit611 hat geschrieben:

Code: Alles auswählen

Procedure ExSQL(sql.s, List ll.TABLE())
  ClearList(ll())
  If DatabaseQuery(0, sql)
    While NextDatabaseRow(0)
      AddElement(ll())
      ReDim rs()\column(DatabaseColumns(0)-1)
      For i=0 To DatabaseColumns(0)-1
        ll()\column(i) = GetDatabaseString(0, i)
      Next
    Wend
  Else
    If Len(Trim(DatabaseError())) > 0
      Debug DatabaseError()
    EndIf	
  EndIf
  ResetList(ll())
EndProcedure
Ändere doch mal

Code: Alles auswählen

ReDim rs()\column(DatabaseColumns(0)-1)
zu

Code: Alles auswählen

ReDim ll()\column(DatabaseColumns(0))
Also die Liste ll() statt rs() nehmen (obwohl es hier die gleiche Liste ist), und
das -1 weg lassen, denn wenn DatabaseColumns() mal 0 zurück gibt, würdest
Du das Array mit dem Wert -1 redimensionieren. '+1' wäre sicherer zum testen.

Mit Debugger solltest Du aber einen Fehler bekommen, 'Array: Out of Bounds Error' oder sowas.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: IMA bei strukturierter LinkedList

Beitrag von Kiffi »

Der Code funktioniert bei mir soweit ohne IMA

(habe eine SQLite Test-Datenbank verwendet (3 Spalten / 1000 Zeilen)).

* Welche Zeile Deines Codes wird den bei dem IMA farblich hervorgehoben?

* Verwendest Du im restlichen Teil Deines Programmes Threads?

Kann auch sein, dass Deine DB 'krumme' Daten beinhaltet.

Grüße ... Kiffi
a²+b²=mc²
bullit611
Beiträge: 4
Registriert: 15.05.2012 17:38

Re: IMA bei strukturierter LinkedList

Beitrag von bullit611 »

Vielen Dank für die schnellen Antworten.

@all: verwende Pure 4.60 auf Win7 64bit, mit jaPBe tritt der Fehler nicht auf, nur bei der Standard-IDE

@Danilo: habe ich bereits geändert, keinen Erfolg

Der IMA tritt nicht immer an der selben Codezeile auf. Die DB Daten sind i.O.
Ja ich verwende teilweise Threads. Die Prozedur ExSQL(sql.s, List ll.TABLE()) wird aus einem Thread heraus aufgerufen, die Verarbeitung der rs.TABLE() erfolgt im selben Thread.

Mfg.
PureBasic 4.60 | Windows 7 SP1 (x64)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: IMA bei strukturierter LinkedList

Beitrag von ts-soft »

bullit611 hat geschrieben:@all: verwende Pure 4.60 auf Win7 64bit, mit jaPBe tritt der Fehler nicht auf, nur bei der Standard-IDE
Dann Tippe ich mal auf eine UserLib und entweder Unicode oder Threadsafe!

Einfach mal in die Hilfe der UserLib schauen und das richtige SubSystem einstellen, weil das macht die Standard-IDE nicht
automatisch.

Auf jeden Fall mal die Einstellungen überprüfen, weil die werden nicht übernommen. Es ist auch nicht ratsam zwei
verschiedene Editoren zu verwenden
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
bullit611
Beiträge: 4
Registriert: 15.05.2012 17:38

Re: IMA bei strukturierter LinkedList

Beitrag von bullit611 »

Danke für den Tip. Benutze auch keine zwei Editoren, habe aber mein Projekt von jaPBe auf Standard-IDE umgestellt, da ich SubVersion zur Versionskontrolle nutze. Und jaPBe schreibt ja immer am Dateiende die Config und SubVersion meldet sich dann natürlich, obwohl nur die Cursorposition verändert wurde.
PureBasic 4.60 | Windows 7 SP1 (x64)
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Re: IMA bei strukturierter LinkedList

Beitrag von Toshy »

Da du ja threads nutzt, rufen mehr als ein Thread diese Procedure auf oder nutzt mehr als ein Thread die selbe LinkedList? "Hauptcode / -Process" ist in dem Bezug natürlich auch als "Thread" anzusehen.
Vielleicht greifen das zwei Threads gleichzeitig auf Daten zu oder was eher sein kann, das ein Thread auf einen Bereich zugreifen will, der gar nicht mehr existiert.
1. Win10
PB6.1
Antworten