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 rechts
    

    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?

    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)

    1. schrieb:

    The absolute value of the most negative number cannot be represented in two’s complement.


Anmelden zum Antworten