若将第10行代码替换为 p = &b;程序依然可以访问p所指内容,所以此段代码无法证明大括号内的内存是否销毁或保留

来源:4-5 创建一个容器的新方法:malloc 和 free

ainijiegeng

2023-08-03 11:07

#include <stdio.h>

#include <iostream>

int main()

{

int* p = nullptr;

{  

int b = 20;

p = &b;

}

*p = 4;

printf(" *p is %d\n", *p);

system("pause");

    return 0;

}


写回答 关注

2回答

  • weixin_慕无忌7470481
    2023-12-14 19:42:47

    c++中清变量不清指针,b被回收,p不变,成为野指针,若此时内存被其他程序占用,则后果不堪设想。

  • 大大白专属
    2023-09-10 14:27:27

    p指向的是一块实际内存地址,就算b被回收了,p还是指向的那块地址,变的是那块地址存储的内容,所谓回收是存储在实际内存中的数据的数清理。

    printf(" *p is %d\n", *p);

    *p = 4;

    可以这样,改一下位置

趣味 C++ 入门

C++ 入门,开启趣味学习之旅,揭开 C++ 的神秘面纱,让你不再望而生畏。

30496 学习 · 184 问题

查看课程

相似问题