Zwei Fragen zum Verhalten eines Codestücks
-
Hi Leute,
in unseren Vorlesungsunterlagen habe ich folgenden Code entdeckt:
int *p = new int[10]; p = &p[1]; //Verschiebung um 1 nach rechtsAber irgendwie sieht das ziemlich gefährlich aus. Verliert man hier nicht die "Information" über den allokierten Speicher? Würde ein delete auf das neue p normal funktionieren?
Die zweite Frage: Liefert folgender Code einen wohl definierten Wert oder ist das Implementation definied/undefined?
std::abs(INT_MIN);Schon mal Danke für alle Antworten!
-
Standardkonform? schrieb:
Aber irgendwie sieht das ziemlich gefährlich aus. Verliert man hier nicht die "Information" über den allokierten Speicher? Würde ein delete auf das neue p normal funktionieren?
Es ist nicht hübsch, aber standardkonform. Nein, ein delete auf das neue p wäre UB, aber niemand hindert einen daran, p wieder zu dekrementieren bevor man delete aufruft.
Standardkonform? schrieb:
Die zweite Frage: Liefert folgender Code einen wohl definierten Wert oder ist das Implementation definied/undefined?
std::abs(INT_MIN);Warum sollte der Code nicht konform sein?
Edit: Tatsache
n1548 7.22.6.1/2 The abs, labs and llabs functions schrieb:
The abs, labs, and llabs functions compute the absolute value of an integer j. If the result cannot be represented, the behavior is undefined. 297)
- schrieb:
The absolute value of the most negative number cannot be represented in two’s complement.