社区
C++ 语言
帖子详情
关于动态内存的怪异问题
zhangjgbupt
2007-08-01 10:17:09
char* ptr;
if((ptr=(char*)malloc(0))==NULL)
put("get a null pointer");
else
puts("get a valid pointer");
我的测试结果是: 尽管把0传给,但是ptr仍然是有地址的,不知道怎么解释??
...全文
282
13
打赏
收藏
关于动态内存的怪异问题
char* ptr; if((ptr=(char*)malloc(0))==NULL) put("get a null pointer"); else puts("get a valid pointer"); 我的测试结果是: 尽管把0传给,但是ptr仍然是有地址的,不知道怎么解释??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
milefo
2007-08-03
打赏
举报
回复
在操作系统中,很多内存操作都是按块进行的。当然可以有不同的块大小。
这种malloc(x)之类的内存申请,实际是想得到一块不小于其要求的x bytes的空间。
想想,如果让你自己去设计,你会怎样做呢?
我想也不会那么任意的。
taodm
2007-08-03
打赏
举报
回复
4还是小的呢。你申请n一般要按8字节取整,以确保对齐问题,还要额外保留cookie字段。。。
申请了n你就只能当n用,讨论它实际分配了多少是一个没实用价值的行为。
星羽
2007-08-03
打赏
举报
回复
If the size of the space requested is zero, the behavior is implementationdefined:
either a null pointer is returned, or the behavior is as if the size were some
nonzero value, except that the returned pointer shall not be used to access an object.
如果所请求的空间大小为0,其行为由库的实现者定义:可以返回空指针,也可以让效果跟申请某个非0大小的空间一样,所不同的是返回的指针不可以被用来访问一个对象。
lockhall
2007-08-03
打赏
举报
回复
不過我在VS2005下,好象還是4個字節啊。。。
就是malloc(0);
逸学堂
2007-08-03
打赏
举报
回复
修正上面的if
if (size == 0) // 在这里进行特殊处理
逸学堂
2007-08-03
打赏
举报
回复
malloc(0)
malloc 0其实是已经写到C标准中去了,对于0要特殊处理.
如同new 0一样.一般都是申请一个字节,用于标注申请到的空间.
常见的
void* operator new(size_t size)
{
if (size == 0; // 在这里进行特殊处理
size = 1;
return operator::new(size);
}
Y神圣
2007-08-03
打赏
举报
回复
个人觉得malloc是将0解释为一个长度,int的长度,达人测试一下?
fish6344
2007-08-02
打赏
举报
回复
这是C语言对内存操作malloc的规定:malloc函数只有在内存申请失败的唯一条件成立时才可以返回NULL!在size为0的情况下至少要返回1个char(1byte),以表示malloc操作是一次成功的内存占有。
lockhall
2007-08-02
打赏
举报
回复
這個要mark下。
對于申請0空間明天仔細研究下。
:)
hearmin
2007-08-02
打赏
举报
回复
你如何测试你申请内存的大小,这点很奇怪,不要告诉我你用sizeof。
只要得到的指针指向的内存区域可写,那么当然可以向该指针指向的地方写入数据,只是写入的地方可能是“他人的领地”。
zhangjgbupt
2007-08-02
打赏
举报
回复
但是测试的结果是: 所申请的内存是大小是0,而不是1,而且可以向里存储数据,很奇怪
gfxiang
2007-08-01
打赏
举报
回复
you can google it with key words "malloc 0".
yydrewdrew
2007-08-01
打赏
举报
回复
http://community.csdn.net/Expert/topic/5681/5681586.xml?temp=.5015222
《你必须知道的495个C语言
问题
》
书中列出了C用户经常问的400多个经典
问题
,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言
问题
》结构...
你必须知道的495个C语言
问题
第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小?...基本的内存分配
问题
7.1 为什么这段代码不行?char*answer;printf("Typesomething...
【动态规划秘籍】背包
问题
和树形DP详解
动态规划是算法竞赛和面试中出现最多的算法,灵活多变的动态规划
问题
令很多学习者望而生畏。【动态规划秘籍】系列视频,教大家彻底搞懂动态规划。动态规划算法一网打尽,算法精讲+刷题实战,通俗易懂,融会贯通。本...
RING3反外挂系统vc6.0版(dll版特征码+数据共享)
没有采用驱动技术,而是采用了大众化的动态链接库技术(DLL),兼容性强,可在xp 、win7、 win8 等操作系统上运作。 功能如下: 1、启动线程检测 网速主流和非主流内存搜索工具的检测(比如金山游侠、ce等) 2、启动...
C语言
动态内存
管理(详解版)
为什么存在
动态内存
分配。 2.
动态内存
函数的使用(malloc、free、calloc、realloc)。 3.常见的
动态内存
错误。 4.举例几个经典的笔试题。 5.柔性数组的概念。6.使用C语言
动态内存
管理来实现通讯录小程序。 1.为...
C++ 语言
64,651
社区成员
250,508
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章