Ich schreibe eine Methode, die eine Kopie eines Arrays von Arrays von Floats erstellt. Ich habe einige extrem seltsame Werte nach dem Debuggen bekommen, also dachte ich, ich würde darüber nachfragen, da ich nicht in der Lage war, das herauszufinden, indem ich über C++ - Array-FAQs las.Null minus Null entspricht unendlich?
Hier ist die relevanten Teile des Codes (es ist Teil eines riesigen Programms, mit dem meisten Sachen irrelevant für diesen Beitrag):
// height and width are integer global variables
void method() {
float testArray[height][width];
for(int j = 0; j < height; ++j) {
for(int i = 0; i < width; ++i) {
testArray[j][i] -= 0.0;
std::cout << testArray[j][i] << std::endl;
}
}
}
(In meinen Tests, Höhe = 32 und width = 256, aber das sollte nicht relevant sein.) Wenn ich testArray initialisiere, sollten seine Werte alle 0.0 sein, korrekt? Dann subtrahiere ich in der Schleife 0.0 von einem bestimmten Element in testArray, was den Wert logisch überhaupt nicht ändern sollte. Aber das Drucken die Werte von testarray als Debugging Schritt Ergebnis in einigen seltsamen Werten wie der folgenden Ausschnitt:
[...]
0
[...]
-3.23805e-24
[...]
8.40779e-45
[...]
1.79513e+37
[...]
0
[...]
3.19586e+36
[...]
Die allerbedenklichste Werte sind die unendlich diejenigen, wie die vierte Nummer oben aufgeführt ist. Ich weiß ehrlich nicht, warum das passiert. Sollten nicht alle diese Werte immer noch ungefähr 0,0 betragen? Ich dachte, es hätte mit der Ungenauigkeit der Fließkomma-Arithmetik zu tun, aber das sollte nicht zu einem unendlichen Wert führen ....
Wenn Sie das Array initialisieren, sind die Werte nicht. initialisiert auf 0, wird Ihnen nur ein zufälliger Speicherbereich mit der richtigen Größe zugewiesen – Sinkingpoint
Sie sollten sicherstellen, dass Sie auf der höchsten Warnstufe kompilieren, die meisten Compiler sollten Sie warnen, dass Ihr Array nicht initialisiert ist .. –
Wow, das war ein schnelle Lösung, danke, mein Compiler hat n ot warne mich überhaupt. Ich habe keine Ahnung, warum ich dachte, dies würde Werte auf 0 initialisieren ... – TakeS