weixin_46264180 2020-07-28 23:00 采纳率: 0%
浏览 781

C++在循环中new出来的动态变量到底什么时候释放?

萌新提问...试图在for循环中用new创建动态变量,然后在循环外再delete。本来以为变量到delete为止都是可用的,但是编译的时候出错了。有点迷惑,new建立在堆上不是不受代码块的影响吗?请大佬指点,谢谢!!

#include<iostream>
using namespace std;

int main()
{
    for (int i = 0; i < 1; i++)
    {
        int* j = new int(1); //在循环中用new创建动态变量
    }
    cout << *j << endl; //编译的时候显示未定义j
    delete j; //明明是这里才delete的呀?
    return 0;
}

谢谢大佬回答!

  • 写回答

4条回答 默认 最新

  • feimimizhiy 2020-07-29 15:10
    关注

    new是建立在堆上,可是变量也是有作用域的,指针变量j的作用域在for循环里面,出了for循环,就出了它的作用域,肯定会报不存在的,即使没有cout << *j << endl; 这一行,delete j这一行也是会报不存在的。j不管是赋值,操作还是删除必须在它的作用域,也就是for循环里面。

    评论

报告相同问题?

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表