AllocateMemory(0, len, 0) -> Fehlermeldung

Für allgemeine Fragen zur Programmierung mit PureBasic.
Poser
Beiträge: 33
Registriert: 09.03.2005 21:02

AllocateMemory(0, len, 0) -> Fehlermeldung

Beitrag von Poser »

"Incorrect number of parameters" kommt da immer.

Is mein PB zu alt oder der Source?

Hab 3.91
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

der source mitlereile ist es:
*pointer=allocateMemory(length)
Poser
Beiträge: 33
Registriert: 09.03.2005 21:02

Beitrag von Poser »

Hm, wie muss das dann hier geändert werden?

If ReadFile(0, windir + "\test.bulk")
len = Lof()
AllocateMemory(0, len, 0)
*mem = MemoryID()
ReadData(*mem, len)
CloseFile(0)
EndIf
Benutzeravatar
Lukas-P
Beiträge: 262
Registriert: 07.10.2004 12:03

Beitrag von Lukas-P »

AllocateMemory(len)

:D
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Nicht nur Lukas-P:

Code: Alles auswählen

 If ReadFile(0, windir + "\test.bulk")
len = Lof()
*mem = AllocateMemory(len)
ReadData(*mem, len)
CloseFile(0)
EndIf
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Eine kleine Anregung:
DarkDragon hat geschrieben:

Code: Alles auswählen

 If ReadFile(0, windir + "\test.bulk")
len = Lof()
*mem = AllocateMemory(len)
ReadData(*mem, len)
CloseFile(0)
EndIf
In letzter Zeit hat es sich hier bei vielen Leuten eingebürgert
Überprüfungen der Rückgabewerte beim reservieren von Speicher
wegzulassen, weshalb man das mal ansprechen muß.

Damit meine ich nicht nur Dich, DarkDragon, sondern allgemein
alle Leute an Board. Auch Leute die schon seit 20 Jahren
programmieren zeigen hier immer häufiger solche Anfänger-
Fehler.
Da hilft auch nicht die Ausrede das man nur BASIC-Programmierer ist
und es da nicht so genau nehmen muß.
"Es ist ja nur ein Beispiel" hilft da auch nicht, da es darum geht
das es zur Gewohnheit wird und sich immer mehr verbreitet,
wie man es hier im Board in letzter Zeit immer öfter beobachten
kann.

Überprüft einfach *immer* ob der Speicher auch reserviert
werden konnte - auch wenn ihr nur 128 Bytes an Speicher
anfordert!
Diese Nullpointer-Geschichten kennt Jeder... nur ist das Problem
das sich hier im Forum der schlechte Anfänger-Programmierstil
immer mehr verbreitet.

Versucht wirklich mal mehr *bewußt* zu programmieren, d.h.
mal mehr denken und auf solche Kleinigkeiten besser achten.
Die Überprüfung von Rückgabewerten sollte Gewohnheit sein,
dann macht man es automatisch und braucht auch nicht mehr
großartig darüber nachzudenken.

Momentan wird meist nichts mehr überprüft und nur noch wie
wild rumge-Poke-d, so daß Ihr damit das klassische Bild der
schlechten BASIC-Programmierer absolut erfüllt.

Ihr tut damit nicht mir einen Gefallen, sondern nur Euch selbst... :)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Poser
Beiträge: 33
Registriert: 09.03.2005 21:02

Beitrag von Poser »

Ja aber warum PB noch komplizierter zu machen als es eh schon ist?
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Poser hat geschrieben:Ja aber warum PB noch komplizierter zu machen als es eh schon ist?
Um Fehler in Deinem Programm zu vermeiden, bzw. die Chance
von Fehlern von vornherein minimieren?
Fehler im Programm gibt es sehr oft, da brauchen wir nicht
drüber reden. Wenn Du aber ohne Fehlerabfragen programmierst
hast Du hunderte oder tausende zusätzliche Fehlerquellen.

Wenn Dein AllocateMemory() schief geht, also den angeforderten
Speicher nicht reservieren konnte, dann enthält Dein Pointer 0 (NULL).
Beim nächsten Befehl der darauf lesend oder schreibend zugreift
gibt es eine Ausnahme (Exception), und Dein Programm wird
vom Betriebssystem wegen dieses unerlaubten Zugriffes
getötet.

Viel Spass dann bei der Fehlersuche...

Davon abgesehen hat aber "programmieren" erstmal nichts mit
einer bestimmten Programmiersprache (z.B. BASIC, Dialekt 'Pure')
zu tun, sondern ist allgemein die Verarbeitung von Daten, das
anwenden von Algorithmen, das Lösen von Problemen (meist
verbunden mit der besonderen Fähigkeit zum logischen Denken),
die (saubere) Arbeitsweise und Planung des Programmierers,
und vieles mehr.

Du solltest nicht nur "PureBasic", "QuickBasic" oder "C" lernen -
sondern *programmieren lernen*!

Wenn Du programmieren kannst, dann ist es egal welche Sprache
Du dann für die Umsetzung eines jeweiligen Projektes nimmst.

Oder denkst Du etwa jemand der die PureBasic-Hilfe liest und
dann "If..Else..EndIf" und "OpenWindow()" anwenden kann,
der kann dann programmieren?

Ganz sicher nicht, denn programmieren ist etwas anderes -
da gehört ein bissl mehr dazu.
Setze Dich ruhig mal hin und überlege was 'programmieren'
eigentlich heißt. Was gehört alles zum programmieren, was
macht einen guten Programmierer aus usw...

(wenn Du noch Anfänger sein solltest wirst Du eh kaum von allein
darauf kommen können was programmieren eigentlich ist)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Danke, ich werd mich mehr um solche Abfragen bemühen.
Sowas wär auch mal eine Idee für den jaPBe oder die StandardIDE in der Auto-Vervollständigung:

Aus:

Code: Alles auswählen

*mem = AllocateMemory(...)
Mach:

Code: Alles auswählen

*mem = AllocateMemory(...)
If *mem
  ;Hier nun die Cursorposition hinlegen
EndIf
;) denn oftmals liegt eine Nicht-Abfrage in der Faulheit eines Menschen.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Oder noch besser:

Code: Alles auswählen

*memory = AllocateMemory(len)
If *memory = 0
    MessageRequester("Titel","Nachricht die in den Einstellungen festgelegt wird!")
    End
else
    ;Cursor
endif
Antworten