c++ - 把一个指向数组的指针delete[]之后,赋值成为指向另一个更长的数组,然后delete[] 这个指针,是否会造成内存泄漏

查看:172
本文介绍了c++ - 把一个指向数组的指针delete[]之后,赋值成为指向另一个更长的数组,然后delete[] 这个指针,是否会造成内存泄漏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

int _tmain(int argc, _TCHAR* argv[])
{
    int* p = new int[3]{1, 2, 3};
    int* k = new int[4]{6, 7, 8, 9};

    delete[] p;
    p = k;
    delete[] p;//此处是否会造成内存泄漏?

    return 0;
}

意思就是说,p初始化时指向的是一个长度为3的数组,而p后来指向了k,那么此时再delete[] p的话,是释放3个单位空间还是4个单位空间?假如只释放3个单位,那就内存泄漏了。
或者换一种说法: delete[] 总要知道需要释放的长度吧。这个长度信息,是跟指针p绑在一起的还是和指针指向的这片地址空间绑在一起的?
如果我是语言设计者的话,我会选择后者,不知我想的对不对。

解决方案

不会,new和delete是处理堆上的内存,堆的管理方式通常会在申请的内存前面加一些关于这块内存的信息,比如长度之类的,所以你new的时候必须指定一个长度,而delete的时候就不需要了,只需要指明是单个还是数组。

这篇关于c++ - 把一个指向数组的指针delete[]之后,赋值成为指向另一个更长的数组,然后delete[] 这个指针,是否会造成内存泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆