Delete a pointer after the arithmetics

后端 未结 5 2026
伪装坚强ぢ
伪装坚强ぢ 2020-12-12 06:28
int main() {
  int* i = new int(1);
  i++;
  *i=1;
  delete i;
}

Here is my logic:

I increment I by 1, and then assign a value to it. Then

5条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-12 06:49

    What your program shows is several cases of undefined behaviour:

    1. You write to memory that hasn't been allocated (*i = 1)
    2. You free something that you didn't allocate, effectively delete i + 1.

    You MUST call delete on exactly the same pointer-value that you got back from new - nothing else. Assuming the rest of your code was valid, it would be fine to do int *j = i; after int *i = new int(1);, and then delete j;. [For example int *i = new int[2]; would then make your i++; *i=1; valid code]

提交回复
热议问题