有关new操作的问题

Hanzo 2003-01-12 06:36:04
大家知道new是分配内存空间的,比如BYTE* pBuf = new BYTE[size]
不知大家想过没有如果size=0,甚至为负数时new做了些什么呢?? pBuf指向的空间能用吗? 有多大? 大家说说吧, 困惑我很久了.
...全文
83 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinhighly 2003-01-14
  • 打赏
  • 举报
回复
up
liu_feng_fly 2003-01-14
  • 打赏
  • 举报
回复
c++标准好象有这样的规定,忘了在哪里看的了:即使new一个size为0的内存,new也要返回一个正确的内存地址,也就是说,你多次new int[0];那么,多次返回的内存地址都可用,而且各个地址都不相同,就和你多次new int[1]不会返回两个相同地址一样
再来看看new int[-1]的情况,new的函数应该看起来是这样
void* operator new (size_t size);可以看出,参数是size_t类型的,而在微软的平台上size_t其实就是unsigned integer,是一个无符号数,所以负数会被编译器理解为一个很大的无符号数
Hanzo 2003-01-13
  • 打赏
  • 举报
回复
回复人: Hanzo(不肯冷却的芯) ( ) 信誉:100 2003-01-12 19:27:00 得分:0


当size=0时,我试过了,pBuf确实指向了一块新的区域, 而且delete[] pBuf也可以. 环境是win2k,vc6.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
release 也这样. 估计pBuf被分配了最小空间--不能使用,只能delete. 也许这样做就是为了处理size=0时的pBuf=new char[size]的.
ruihuahan 2003-01-13
  • 打赏
  • 举报
回复
debug版本的new会在实际分配的前后加上一些用于调试的信息,size为0的时候也会有这些调试信息,所以会有size为0的指针。
用release版试试,会是什么情况!!!
loopyifly 2003-01-13
  • 打赏
  • 举报
回复
来学习!

up
shitalone 2003-01-13
  • 打赏
  • 举报
回复
up
hanwg 2003-01-13
  • 打赏
  • 举报
回复
同意楼上
Chice_wxg 2003-01-12
  • 打赏
  • 举报
回复
个人认为 new char [0] 实际只得到了一个地址指针,地址前保存了当前申请的大小(0)。
也就是说到底还是耗费了内存,不过这个指针一般不能使用而已。
Hanzo 2003-01-12
  • 打赏
  • 举报
回复
用负数,将会申请失败,系统将这个负数做无符号整数对待
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有道理.
size=0时呢?? 有没有分配空间? 没关系,大家来说说自己的想法. 互相学习嘛!

现在我要根据用户输入的size来开辟空间, 当然0也是合法的输入. 但是我不知道new一个size=0的空间会发生什么?? 能不能这么做?
hwndhwnd 2003-01-12
  • 打赏
  • 举报
回复
好好学习了一下。
yrj 2003-01-12
  • 打赏
  • 举报
回复
用负数,将会申请失败,系统将这个负数做无符号整数对待,而这个数太大,而是WINDOWS分配失败
Hanzo 2003-01-12
  • 打赏
  • 举报
回复
当size=0时,我试过了,pBuf确实指向了一块新的区域, 而且delete[] pBuf也可以. 环境是win2k,vc6.
zswzwy 2003-01-12
  • 打赏
  • 举报
回复
error

try
{
BYTE* pBuf = new BYTE[size]
}
catch(...)
{
......
}
everandforever 2003-01-12
  • 打赏
  • 举报
回复
JUST HAVE A TRY.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧