社区
C语言
帖子详情
两次连续new,是不是两次分配不同的内存?
allen1981813
2003-01-16 01:07:08
?????????????
...全文
115
10
打赏
收藏
两次连续new,是不是两次分配不同的内存?
?????????????
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wendymouse
2003-01-16
打赏
举报
回复
是否只有全局变量的指针在delete以后才需要付值为NULL?
rushman
2003-01-16
打赏
举报
回复
不是。
我的意思是,当指针变量是临时变量时,而且内存释放后,此临时的指针变量明显已不再被使用的时候,可以不用置为NULL。
不过如果你搞不清楚,用完后就置为NULL,总不会错 ^_^
rushman
2003-01-16
打赏
举报
回复
一般来说,是这样。
例外就是函数中的临时指针变量。一般会在函数返回前释放内存,而且临时变量返回后也就没有意义了,可以不用将之置为NULL。
allen1981813
2003-01-16
打赏
举报
回复
那么就是人们常建议的delete后用pointer=null or 0?
rushman
2003-01-16
打赏
举报
回复
空指针一般是表示此指针无效。
在内存尚未分配前用NULL,在内存被释放掉后用NULL(尤其是全局的指针变量),也就是一种标志。用好它,可以避免许多错误。起码NULL所指的是一个确切的地址(虽然无法访问),而释放后的指针如果还指向原来的地址,没有任何机制可以防止此内存被再次存取(也就是说,虽然delete了,可是该地址依然可以访问),这样就会产生一些无法预料的错误。
allen1981813
2003-01-16
打赏
举报
回复
长知识了
那何种情况会有null pointer assigment
rushman
2003-01-16
打赏
举报
回复
所以,有一些内存泄漏的事情,就是因为没有delete
rushman
2003-01-16
打赏
举报
回复
对
allen1981813
2003-01-16
打赏
举报
回复
也就是一次new,就一定要一次delete才能在分配?
rushman
2003-01-16
打赏
举报
回复
new之后,如果不释放(delete),是不会被再次分配出去的(多线程的时候需要指明)。
面试题:malloc 和
new
分配
的
内存
是否是
连续
的?
因此,即使
连续
两次
分配
同样大小的
内存
,由于元数据和
内存
碎片的存在,
分配
的地址可能并不
连续
。例如,第一次调用 malloc(100) 可能返回地址 0x1000,而第二次调用 malloc(100) 可能返回 0x10A0,中间可能有元数据或其他已
分配
的
内存
块,导致两者之间并不
连续
。
new
是C++中的操作符,除了
分配
内存
外,还会调用对象的构造函数。对于C++的
new
操作符,虽然
new
在
分配
内存
的同时调用构造函数,但底层的
内存
分配
通常还是通过malloc实现的(除非用户自定义了operator
new
)。
C++ 动态
分配
数组
内存
连续
环境:Win10 x64,VS2015 问题:最近项目用到C++ 调用 Fortran,传参是多维数组,如果C++ 端定义data[3][4][5],Fortran 接收数据没有问题, 但是数组data的容量是不定的,需要动态确定,动态申请后的数组,传到Fortran端数据就截断了....... 分析:查阅资料才知道,数组动态
分配
内存
有两种方式: 方法1: void malloc2D_1(int **&a) { a =
new
int*[xDim]; for(int i.
C++---动态
内存
分配
new
delete
C++---动态
内存
分配
new
delete
C++中用
new
动态
分配
内存
当第一次delete就把这块
内存
还给了机器,如果再次delete就相当于拿机器的
内存
还给机器,可能破坏正在使用这块
内存
的程序中的数据。类型后面加空括号,系统默认初始化,例如此处申请到的空间被初始化为0,如果是char类型,将被初始化为NULL。并且这里(*p)的括号是必须加的,因为[]的优先级高于*,如果不加,就是创建了一个长度为3的指针数组。把char[3]看成一个数据类型,p是指向一个长度为5的char[3]类型的数组首地址的指针变量,释放
内存
:须一级一级地释放,并且先释放数组的第row行,
Java
New
对象
分配
内存
流程
1.为什么要
分配
在栈上?通过JVM
内存
模型中,我们知道Java的对象都是
分配
在堆上的。当堆空间(新生代或者老年代)快满的时候,会触发GC,没有被任何其他对象引用的对象将被回收。如果堆上出现大量这样的垃圾对象,将会频繁的触发GC,影响应用的性能。其实这些对象都是临时产生的对象,如果能够减少这样的对象进入堆的概率,那么就可以成功减少触发GC的次数了。我们可以把这样的对象放在栈上,这样该对象所占用的
内存
空间就可以随栈帧出栈而销毁,就减轻了垃圾回收的压力。2.什么情况下会
分配
在栈上?
C语言
70,020
社区成员
243,265
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章