Hat sich zwar schon erledigt, aber ich möchte trotzdem antworten:
Ich benötige für das Programm ein 3-Dimensionales Feld.
[...]
in C++ scheitere ich damit aber leider, lediglich das zweidimensionale Array habe ich bisher geschaft.
Verständlich, hier kann es zum Problem werden dass in C++ bei deklarierten Arrays nur die erste Dimension von variable Breite sein darf und das auch nur bei mit "new" erzeugten Arrays.
Anscheinend ist "dim" bei dir eine Konstante, sonst würde der Compiler meckern.
Mein Versuch das ganze dann zu übertragen war folgender:
[...]
Hierbei erhalte ich aber einen Speicherzugriffsfehler.
Du könntest dir eine kleine Hilfsklasse schreiben, ähnlich dieser hier:
Code:
struct vec_3d
{
vec_3d(int size_x, int size_y, int size_z)
: size_x(size_x), size_y(size_y), size_z(size_z), storage(size_x * size_y * size_z) { }
int& get(int x, int y, int z)
{
return const_cast<vec_3d&>(*this).get(x, y, z);
}
int const& get(int x, int y, int z)
{
assert(x < size_x); assert(y < size_y); assert(z < size_z);
return storage.at(x * size_y * size_z + y * size_z + z);
}
std::vector<int> storage;
};
Dann hättest du eine Art mehrdimensionales Array mit rudimentärer Bereichsüberprüfung (d.h. die ist noch nicht ganz vollständig).
Generell würde ich empfehlen für Hausaufgaben den Compiler so aufzurufen, dass möglichst viele Sicherheitsüberprüfungen vorgenommen werden. Für den GCC z.B. die Optionen -D_GLIBCXX_DEBUG und -fstack-protector-all zu benutzen, wenn möglich. Und zusätlich viele Asserts in den Code einzubauen. Das kann einem die Fehlersuche ggf. erleichtern.
Lesezeichen