StefanS Geschrieben November 18, 2016 at 10:32 Geschrieben November 18, 2016 at 10:32 Hallo zusammen, Ich nutzt zur Zeit ein PTC Bricklet an einem Master Brick. Das Auslesen über BrickViewer funktioniert einwandfrei. Nun habe ich das Beispiel C++ Programm in VisualStudio geladen. Das Auslesen der Temperatur funktioniert einwandfrei. Nun möchte ich die Funktion ptc_get_resistance nutzen. Diese erzeugt aber folgenden Fehler: Run-Time Check Failure #2 - Stack around the variable 'response' was corrupted. Um Herauszufinden, wo das Problem liegen könnte, bin ich im Debug Modus den Code durchgegangen. Der Fehler erscheint, wenn die Funktion verlassen wird. Meiner Internetrecherche zufolge kann das an zu voll gestopften Arrays liegen, unsachgemäßem Löschen von Variablen oder versehentliches verschieben von Pointern. Aber es handelt sich hier um die Datei bricklet_ptc.cpp. Diese habe ich nicht verändert und finde den Fehler nicht. Ist dieser schon bei jemand anderem aufgetaucht? Im Folgenden einmal meine Änderungen zum Beispielcode (example_simple.c) Alles andere ist wie es auf der Homepage zur Verfügung gestellt wird: // Get current resistance uint16_t resistance; if (ptc_get_resistance(&ptc, &resistance) < 0) { fprintf(stderr, "Could not get temperature, probably timeout\n"); return 1; } resistance = (resistance * 3900) / 32768; printf("Temperature: %f Ohm\n", resistance); Zitieren
photron Geschrieben November 18, 2016 at 13:19 Geschrieben November 18, 2016 at 13:19 Ich kann das Problem nachstellen, wenn ich die Visual Studio IDE nehme. Wenn ich aber direkt den Visual Studio Compiler aufrufe tritt das Problem nicht auf. Es muss also mit den Compileroptionen zu tun haben. Muss ich mir genauer ansehen. So auf den ersten Blick ergibt das keinen Sinn. Zitieren
StefanS Geschrieben November 18, 2016 at 13:27 Autor Geschrieben November 18, 2016 at 13:27 Das Problem ist reproduzierbar, das ist schon mal gut. Danke für die schnelle Antwort. Von dem Compiler habe ich leider auch gar keine Ahnung. Aus dem Grund bin ich jetzt erstmal auf C# umgestiegen und da funktioniert alles wie es soll. Eine Lösung wäre aber natürlich für andere Nutzer auch interessant. Wenn ich zwischenzeitlich eine Lösung finde werde ich natürlich auch ein Update schreiben Zitieren
photron Geschrieben November 18, 2016 at 13:41 Geschrieben November 18, 2016 at 13:41 Okay, habe das Problem gefunden. Es betrifft alle Bindings, nicht nur C/C++. Aber nicht in allen Bindings wird das Problem auch sichtbar. Das Problem ist, dass die Bindings erwarten, dass die Resistance als uint16 übertragen wird, das PTC Bricklet diese aber als int32 überträgt. Dadurch ist der Empfangsbuffer (response) in den C/C++ Bindings für diese Antwort 2 Byte zu kurz. Das verursacht die Stackcorruption die Visual Studio meldet. Das Problem wird mit der nächsten Version der Bindings behoben werden. Zitieren
StefanS Geschrieben November 18, 2016 at 14:45 Autor Geschrieben November 18, 2016 at 14:45 Sehr gut. Danke für die schnelle Klärung Dann erkläre ich das Thema mal als geschlossen. Zitieren
photron Geschrieben July 18, 2017 at 07:50 Geschrieben July 18, 2017 at 07:50 Dieses Problem sollte eigentlich schon vor einer ganzen Weile behoben worden sein. Allerdings scheint der Fix damals abhanden gekommen zu sein, so dass das Problem erst jetzt mit Version 2.1.16 der C/C++ Bindings behoben ist. Sorry, für diese unnötig lange Verzögerung. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.