ich arbeite an sich schon lange und oft mit Pointern, an sich nie ein Problem, aber nun kampfe ich hier seit "Wochen" (!!!) ständig mit einem Problem an meinem Code. Irgendwie Läuft es anders als es soll, das passiert ja oft, aber ich habe keine Fehler im Code gefunden. Na ja, keinen der sich auf das hier bezieht.
Ich muß einfach Scheuklappen vor den Augen haben, erklärt mir mal was ich falsch mache, oder ob PB irgend wie anderes reagiert als ich es erwarte. Das muß ja kein Bug sein, nur das ich einfach was übersehe.
Ich habe mich echt über sehr lange Zeit an das Problem rangekämpft. Da das Problem ständig einen Speicherfehler auslöst und damit die Debuggeranzeige weg geht, hat das noch länger gedauert.
Problem:
Ich erstelle einen Speicherbereich. Was hinter dem Speicherbereich steht ist für mich ja an sich uninteressasnt, da sollte ich ja eh nicht darauf zugreifen. Aber durch das testen bin ich darauf gekommen, das ein paar Bytes hinter meinem allokierten Speicher ein Wert steht, immer Wert "11".
An sich geht mich nichts an, was da steht. Nur jetzt reallokiere ich den Speicher. Dann bekomme ich (eventuell) ein neuen Pointer. Unabhängig davon, sollte der Speicherbereich vergrößert sein. Klappt auch. ABER JETZT:
Der Reallokierte Speicher sollte den Inhalt des alten Speichers beinhalten und den zusätzlichen Speicher mit Nullen überschreiben. Aber anstatt dessen, steht der Wert 11 jetzt innerhalb meines allokierten Speichers. Das kann ja nur krachen.
Was mache ich falsch, oder hat da PB glatt einen übersehenen Bug?
Code: Alles auswählen
Structure struct_NetID
*OutgoingDataBuffer
EndStructure
Structure struct_NetIDOutgoingDataBuffer_PartManagement
*EventID.struct_NetworkSendEventID
NetworkSendEventMode.b
SuccessfullySend.i
Size.i
EndStructure
*NetID.struct_NetID = AllocateMemory(SizeOf(struct_NetID))
*NetID\OutgoingDataBuffer = AllocateMemory(2)
Debug("+5MemorySize(*NetID\OutgoingDataBuffer) = " + Str(MemorySize(*NetID\OutgoingDataBuffer)) + " - peekl(*NetID\OutgoingDataBuffer+5)" + Str(PeekL(*NetID\OutgoingDataBuffer+5)))
*NetID\OutgoingDataBuffer = ReAllocateMemory(*NetID\OutgoingDataBuffer,17)
Debug("+5MemorySize(*NetID\OutgoingDataBuffer) = " + Str(MemorySize(*NetID\OutgoingDataBuffer)) + " - peekl(*NetID\OutgoingDataBuffer+5)" + Str(PeekL(*NetID\OutgoingDataBuffer+5)))
Delay(20000)Getestet unter Windows XP, PB 4.60 und 4.61[09:17:40] +5MemorySize(*NetID\OutgoingDataBuffer) = 2 - peekl(*NetID\OutgoingDataBuffer+5)11
[09:17:40] +5MemorySize(*NetID\OutgoingDataBuffer) = 17 - peekl(*NetID\OutgoingDataBuffer+5)11
Nachtrag:
Code: Alles auswählen
*pointer = AllocateMemory(2)
Debug("*pointer = " + Str(*pointer ) + " - *pointerSize = " + Str(MemorySize(*pointer)) + " - PeekL(*pointer+5)" + Str(PeekL(*pointer+5)))
*pointer = ReAllocateMemory(*pointer,17)
Debug("*pointer = " + Str(*pointer ) + " - *pointerSize = " + Str(MemorySize(*pointer)) + " - PeekL(*pointer+5)" + Str(PeekL(*pointer+5)))
2. Nachtrag.[09:28:50] *pointer = 31858324 - *pointerSize = 2 - PeekL(*pointer+5)11
[09:28:50] *pointer = 31858324 - *pointerSize = 17 - PeekL(*pointer+5)11
Unter Purebasic Version 4.00 gibt es kein Problem. Da läuft alles korrekt. Ist also wohl ein Bug.
Könntet ihr vielleicht die PB Versionen zwischen PB 4.00 und 4.60 (die beiden nicht) runterladen und schauen, ab welcher Version der Bug auf tritt. Ich kann das nicht machen, DSL ist seit zwei Wochen weg und dauert noch einige Wochen bis umgeschaltet wird. Und da wir hier mit 4 Rechnern nun am Handynetz hängen (nur 5 kbyte/sek) dauert ein zwei Tage alle Versionen zu laden, da die anderen REchner auch im netz sind würde s noch länger dauern.
Die Fehlerversion sollte schnell rausgefunden werden, damit wir Fred das schnell sagen können und er vielleicht ein Zwischenupdate raus gibt. Ein Fehler in der Speicherverwaltung ist ja schließlich ganz übel.
Und sicher nicht nur, weil ich seit 3 Wochen meine Threads sinnlos auf den Kopf gestellt habe.
Heiliger Himmel, bin ich frustriert und erleichtert zu gleich.
