Defaultwert Initialisierung
-
Hallo erstmal...
double* test = new double[100](); double a = test[12];
Dann müsste hier a den Wert 0.0 haben.
Ich krieg aber a = -6.2774385622041925e+066 zurück.Ok, das ist schon nah an der 0
Aber so ganz dann doch nicht.Oder mach ich da irgendwas grundlegend falsch...
-
meinst du das:
double* test = new double[100];
aber denke daran, daß das Array noch nicht initialisiert ist!! Ihm wird nur Speicher zugewiesen; da steht noch irgendein 'Schrott' drin;-))
-
Speicher freigeben nicht vergessen!!!!!!
delete []test;
-
freshman schrieb:
meinst du das:
double* test = new double[100];
Nein, er meint das, was in seinem Posting steht.
-
müsste das nich ne 0 initialisierung machen?
double* test = new double[100](0);//<--da double a = test[12];
-
DJGPP 3.3.3 kann das jedenfalls nicht
-
@otze: error C2538: new : cannot specify initializer for arrays
@all: sorry für meinen nonsense
-
jo geht echt nich...
double* test = new double[20]; ZeroMemory(test,sizeof(double)*20); delete[] test;
so klappts aber(aber leider nur da, wo die windows.h is :()
-
Ich hab das ganze mal mit ein paar Compilern von MS probiert, und das folgende kam dabei heraus:
VC++ 6: Initialisierung findet nicht statt,
VC++ 7.1 & VC++ 8: Initialisierung erfolgt beim Aufruf mit ...()Also denk ich wohl, dass ein standardkonformer Compiler die Initialisierung schon ausführt.
-
Kühl! :p
Das haut hin. Mal sehen ob das schneller als ne olle Schleife ist...
-
ZeroMemory ist nur ein Makro, das memset benutzt.
Man könnte einfach std::fill, std::memset nehmen...
-
@otze:
Schmeiss' die windows.h raus und mach#include <memory.h> ... memset(test, 0, sizeof(double)*20);
Ich weiss leider nicht so genau, ob es im Standard einen äquivalenten Header ohne das .h gibt
So bist Du auf jeden Fall den unnötigen Windows-Ballast los.[edit]mist, schon wieder zu langsam[/edit]
-
//schnipp
-
Deadlef schrieb:
Ich weiss leider nicht so genau, ob es im Standard einen äquivalenten Header ohne das .h gibt
#include <cstring> #include <memory>
-
memory hat aber mit memset nichts zu tun.
-
Soweit ich das sehe ist eine Initialisierung in einer For-Schleife praktisch kaum langsamer als std::memset.
Wahrscheinlich geht es eh nicht groß schneller... der Compiler wird sich das intern schon so optimieren wie er es braucht (hoffe ich mal)
-
@Shlo: wozu #include<cstring> ?
-
memset macht nix anderes, ist aber viel schöner als ne forschleife,ausserdem ist die stl dazu da benutzt zu werden, aus einigen gründen, die hier aufzuführen etwas am thema vorbeigehen würden
-
freshman: Weil memset dort deklariert ist.
otze: memset ist nicht Teil der STL.
-
sicher? shame on me(aber nichts destotrotz trotzdem da um benutzt zu werden)