社区
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仍然是有地址的,不知道怎么解释??
...全文
285
13
打赏
收藏
关于动态内存的怪异问题
char* ptr; if((ptr=(char*)malloc(0))==NULL) put("get a null pointer"); else puts("get a valid pointer"); 我的测试结果是: 尽管把0传给,但是ptr仍然是有地址的,不知道怎么解释??
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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语言
问题
第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小?...基本的内存分配
问题
7.1 为什么这段代码不行?char*answer;printf("Typesomething...
RING3反外挂系统vc6.0版(dll版特征码+数据共享)
没有采用驱动技术,而是采用了大众化的动态链接库技术(DLL),兼容性强,可在xp 、win7、 win8 等操作系统上运作。 功能如下: 1、启动线程检测 网速主流和非主流内存搜索工具的检测(比如金山游侠、ce等) 2、启动...
C语言
动态内存
管理(详解版)
为什么存在
动态内存
分配。 2.
动态内存
函数的使用(malloc、free、calloc、realloc)。 3.常见的
动态内存
错误。 4.举例几个经典的笔试题。 5.柔性数组的概念。6.使用C语言
动态内存
管理来实现通讯录小程序。 1.为...
总结:三种传递动态分配内存的方法
在项目中,遇到到需要专门做一个函数来实现
动态内存
的分配,然后其他的函数都可以使用这块内存进行读写。但是比较
怪异
的是,在其他函数中对该块内存的标识是通过一个unsigned long的变量,而并非通过一个指针指向该...
关于malloc申请的
动态内存
的
问题
在运行期动态分配分配内存 ,free() 释放由其分配的内存。 malloc() 在分配用户传入的大小的时候,还分配的一个相关的用于管理的额外内存,不过,用户是看不到的。所以, 实际的大小 = 管理空间 + 用户...
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章