加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 动态内存分配 – 为什么程序结束时没有“删除”?

发布时间:2020-12-16 03:41:16 所属栏目:百科 来源:网络整理
导读:我有两个关于以下程序的问题: 1.程序是否只创建动态元素(类型矩形和六边形),还是指向它们的指针是动态的? 2.为什么程序最后没有删除.例如这样的事情:(如果我正确地假设只有元素是动态的..) for(i=0;i3;i++) delete shapeArray[i]; 非常感谢,这个网站帮助了
我有两个关于以下程序的问题:
1.程序是否只创建动态元素(类型矩形和六边形),还是指向它们的指针是动态的?

2.为什么程序最后没有删除.例如这样的事情:(如果我正确地假设只有元素是动态的..)

for(i=0;i<3;i++)
    delete shapeArray[i];

非常感谢,这个网站帮助了我很多老师无法帮助的事情!
使然

该计划是:

int main()
{
 // Create array of pointers to Shapes of various types.
 const int NUM_SHAPES = 3;

 Shape * shapeArray[] = { new Hexagon(),new Rectangle(),new Hexagon()
 };

 // Set positions of all the shapes.
 int posX = 5,posY = 15;
 for (int k = 0; k < NUM_SHAPES; k++)
     {
 shapeArray[k]->setPosition(posX,posY);
 posX += 10;
 posY += 10;
};

 // Draw all the shapes at their positions.
 for (int j = 0; j < NUM_SHAPES; j++)
{
 shapeArray[j]->draw();
 }

 return 0;
 }

解决方法

>您的程序在堆栈上创建一个指向Shape的指针数组.数组大小在编译时从初始化列表{}的长度已知.初始化列表中的每个元素都是通过operator new在堆上创建的Shape的地址. >它们没有被释放的事实是糟糕的风格,你的操作系统将释放程序退出时分配的动态内存,因此在这种特殊情况下它不会产生一些后果,但是保留未删除的内存会检测到“真正的”内存泄漏更加困难.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读