Arrayrückgabe in Methoden / Seltsamer Fehler
-
Howdy @ all...
Ich versteh die Welt nicht mehr. Folgende paar Zeilen Vorwort.
Ich habe ein Projekt in Windows geschrieben, compiliert und es funktioniert. Nun kam die Anforderung, dieses Projekt in Linux zu portieren. Die externen Bibliotheken sind jeweils Linux/Win kompatibel, von daher eigentlich kein Problem.
Nachdem ich das ganze auch fehlerfrei in Linux gebaut habe und dann starten wollte, wurde mir ein Speicherzugriffsfehler um die Ohren gehauen.Nur gibt mir etwas zu Denken... eher Grundlagenkram, den ich aber bisher nie so wirklich verinnerlicht habe.
Folgende Zeilen Beispielcode (will net das ganze posten):
dummy.h
class a { public: ... float* minimumVector(); //getter für ein Array ... private: ... float minVector[3]; }dummy.cpp
... float* Dummy::minimumVector() { return minVector; // Dieser wird vorher in der Programmlogik gefüllt. } ...Nach einigen Stunden Fehlersuche bin ich auf folgenden problembehafteten Code gestossen:
... float tmp = dummy->minimumVector()[0]; ...Genau an der Stelle tritt der Fehler auf, und ich weiss wirklich nicht warum.
Was noch verblüffender ist, ist die Tatsache das wenn ich das Array public deklariere, ich mit...
... float tmp = dummy->minVector[0]; // direkter Zugriff auf das public deklarierte Element. ...... ebenfalls einen Speicherzugriffsfehler bekomme. Irgendwie ist mir das wirklich zu hoch.
Need Help plz...
..
.
Danke
-
Hallo,
Worauf zeigt das Objekt dummy?Ansonsten versuche doch den Fehler in einem Minimalbeispiel zu reproduzieren; deine geposteten Code-Snippet sehen jedenfalls korrekt aus...
Gruß Caipi
-
-
Die Klasse heißt "a", also müsstest du die Methode auch mit "float* a::minimumVector()" definieren.
-
"Dummy" ist ein Pointer auf a ("a* dummy;"), richtig? In dem Fall solltest du ihm einen sinnvollen Wert zuweisen - entweder mit "dummy=new a;" oder "dummy=&my_a;"
-
So wie deine Klasse aussieht, hast du den Sinn von private nicht ganz verstanden

-
-
Find das generell etwas unschön...
Warum gibst du bei deiner Getroutine nicht gleich den Index als Parameter zurück und lieferst nur die Referenz auf das jeweilige Element zurück?
So kannst du an EINER Stelle falls notwendig überprüfen ob der Index gültig ist. Ansonsten musst du das an vielen Stellen sicherstellen.