打印

内存分配问题

[复制链接]
911|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dfsa|  楼主 | 2012-4-23 18:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<iostream>#include<assert.h>
using
namespace std;


void main()
{
   
char
*ptr;
   
if((ptr=(char*)malloc(0))==NULL)
        cout
<<"bad pointer"<<endl;
   
else
        cout
<<"valid pointer"<<endl;
    system(
"pause");
}

以上这段代码输出的是一个合法的指针,但是这样的指针有什么用呢,应该不能在里面存储东西吧。如果是这样为啥还让这种赋值合法呢?

相关帖子

沙发
hsbjb| | 2012-4-23 18:25 | 只看该作者
malloc(0),是有用的,比如判断堆空间,还可以防止指针被乱用。这么一小段东西,还有很多用途的,只是你还没学到。

使用特权

评论回复
板凳
无冕之王| | 2012-4-23 18:29 | 只看该作者
标准的诀窍在于 假如该功能是由使用者决定使用方式. 那么标准就要提供基础的方式 而不是做限制.
假如你想让 malloc(0)失败. 你只需要自己封一层即可.
但是如果标准要求实现的malloc(0)是失败的.
那么你想他不失败 将会如何. 所以该种设计是一种更合理的做法.

使用特权

评论回复
地板
秋天落叶| | 2012-4-23 20:10 | 只看该作者
malloc(0)是返回 非NULL, 无论标准c++ ,还是 vs工具,但是确实没有意义

使用特权

评论回复
5
xsgy123| | 2012-4-23 20:15 | 只看该作者
malloc(0),不建议这么用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

282

主题

2404

帖子

2

粉丝