社区
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仍然是有地址的,不知道怎么解释??
...全文
311
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
C++中的指针初始化
本文深入探讨C++中指针的初始化过程,包括指针和其指向的内存地址的初始化,以及不初始化可能带来的
问题
。文章讲解了如何在定义指针时直接初始化,以及初始化为空指针和
动态内存
的方法。
总结:三种传递动态分配内存的方法
本文介绍了三种不同的方法来实现
动态内存
分配并传递给其他函数。这些方法包括返回内存地址的值、通过指针传递内存地址以及使用指向指针的指针。每种方法都附有示例代码,并进行了详细的解释。
C中二维数组作为参数的几种做法
本文探讨了C语言中参数传递的几种常见方法,包括
动态内存
分配、二维数组、指针和指针指针等。作者推荐了使用
动态内存
分配的方式,因为它直观且方便。同时,文章提到了指针指针法可能导致的误解,以及固定大小数组在声明时的限制。
java变量数组长度_C语言中的变量长度数组
本文探讨了在C语言中使用可变长度数组(如`unsigned long long int aa[test];`)在不同编译器(如VC6和GCC)下的编译
问题
,以及如何在C99及以上版本中正确处理
动态内存
分配和数组。作者还展示了如何在GCC支持下使用`malloc`分配数组,并对比了不同情况下的内存分配策略和注意事项。
C语言指针陷阱大全:那些年踩过的数组与指针坑
本文系统梳理C语言中指针与数组的29类典型陷阱,涵盖数组名与指针本质区别、类型匹配错误、边界越界、
动态内存
管理缺陷、多级指针混淆、const修饰歧义、内存对齐违规、跨平台指针兼容性、安全编程缺失及编译器优化干扰等关键技术风险点,并给出调试技巧、静态分析工具推荐和现代C标准(C99/C11)下的最佳实践。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章