Frage zu new & delete
-
Hallo zusammen,
ich bin neu hier im Forum und bin schon seit einiger Zeit an C und C++ dran. Ich würde mich als fortgeschrittener Anfänger bezeichnen

So nun zu meiner Frage:
#include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { double** matrix; //Zeiger auf Zeiger mit dem Namen matrix int dim; cout << "Dimension eingeben: "; cin >> dim; //Speicher fuer dim x dim Matrix anfordern double size=(sizeof(double*)*dim); //zum Testen cout << "\n" << size; //zum Testen matrix = static_cast<double>(new double(sizeof(double*)*dim)); /* matrix = (double**)malloc(sizeof(double*)*dim); for(int i=0 ; i<dim ; i++) { matrix[i] = (double*)malloc(sizeof(double)*dim); } */Es geht darum, das statt maloc und free new und delet verwendet werden sollen (ursprüngliche Code wurde mit /* */ auskomentiert ab Zeile 20).
Ich stolper jetzt schon seit 2h über die Speicherzuweisung von new.Als Fehler bekomme ich nun: "invalid static_cast from type 'double*' to type 'double'
Ich bekomme es zur Zeit nicht hin den Zeiger auf den Zeiger mit dem Namen matrix so zu initialisieren, damit der Speicherbereich der zu erwartenden Größe reserviert wird.
Ich bin für Tips, Erklärungen, Hinweise sehr Dankbar.
-
double size=(sizeof(double*)*dim); //zum TestenWenn es gerade nicht zum Testen ist, sollte eine Größenangabe einen ganzzahligen Typ haben, vorzugsweise std::size_t. Allerdings brauchen wir das hier sowieso nicht.
matrix = static_cast<double>(new double(sizeof(double*)*dim));Was soll denn der Cast da? Und warum nach double? Breiten wir mal den Mantel des Schweigens darüber...
matrix ist ein Zeiger auf double-Zeiger, also allozieren wir mit new ein Array von double-Zeigern:
matrix = new double*[dim];Achso, der Form halber weise ich dich darauf hin, dass das mit std::vector viel besser geht.
-
Vielen Dank für die Lösung. Klappt jetzt ist mir zwar noch nicht komplett klar warum aber ich komme langsam dahinter.
Wie gesagt jeder fängt mal klein an
