免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: kernelxu
打印 上一主题 下一主题

空指针究竟指向了内存的哪个地方? [复制链接]

论坛徽章:
0
81 [报告]
发表于 2005-07-20 16:20 |只看该作者

空指针究竟指向了内存的哪个地方?

善哉善哉!都怪我,沉下去的帖子被我捅了起来。
阿弥陀佛。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
82 [报告]
发表于 2005-07-20 16:25 |只看该作者

空指针究竟指向了内存的哪个地方?

原帖由 "gvim" 发表:


呵呵, 兄弟醒悟了。。。。   


兄弟 其实我挺爱帮助人的. 不过最近胡搅蛮缠的人比较多.

论坛徽章:
0
83 [报告]
发表于 2005-07-20 16:25 |只看该作者

空指针究竟指向了内存的哪个地方?

算了不吵也罢, 我是从本质上看问题...

有些人初初看linux和unix内核源代码,不少人说代码是很难读懂....

并非是标准C... gcc本身就不完全是标准C....若linux一定要用标准C来写的话.那

就不是linux了

另一方面,也阻碍了C的发展

论坛徽章:
0
84 [报告]
发表于 2005-07-20 16:48 |只看该作者

空指针究竟指向了内存的哪个地方?

原帖由 "mik" 发表:


malloc 分配不成功,不返回 0 返回什么?

返回NULL????

char *p = (char *)malloc(sizeof(char) * N);
if (!p) 有错么?

man 3 malloc
说的很明白
有什么好争的

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
85 [报告]
发表于 2005-07-20 16:51 |只看该作者

空指针究竟指向了内存的哪个地方?

原帖由 "mq110" 发表:


兄弟 其实我挺爱帮助人的. 不过最近胡搅蛮缠的人比较多.


呵呵,遇到讲道理,懂礼貌的谁都愿意帮,哪怕自己麻烦点。
遇到“胡搅蛮缠”的,呵呵,还是及早醒悟的好。

论坛徽章:
0
86 [报告]
发表于 2005-07-20 16:53 |只看该作者

空指针究竟指向了内存的哪个地方?

原帖由 "mik" 发表:


malloc 分配不成功,不返回 0 返回什么?

返回NULL????

char *p = (char *)malloc(sizeof(char) * N);
if (!p) 有错么?

malloc 分配不成功,当然是返回NULL了,man malloc!

论坛徽章:
0
87 [报告]
发表于 2005-07-20 17:00 |只看该作者

空指针究竟指向了内存的哪个地方?

这个问题讨论的还真是激烈!

论坛徽章:
0
88 [报告]
发表于 2005-07-20 22:54 |只看该作者

空指针究竟指向了内存的哪个地方?

在 linux 下, malloc 函数在 glibc 库中..

查看 glibc 下 malloc 的实现代码,可以得知:

代码中定义了:
#define __malloc_ptr_t  (void *)
....
#define NULL  ((__malloc_ptr_t)0)
......

而 malloc 的实现代码中,出错时只是简单地 return 0;

也就是说简单地将 0 赋给了 __malloc_ptr_t  类型

整个源代码中,并没有看见过 return NULL;
或是: return (__malloc_ptr_t)0; 之类的.

虽然,在malloc的手册上说明失败时返回 NULL:
事实上,只是将0作为返回值...

论坛徽章:
0
89 [报告]
发表于 2005-07-21 00:47 |只看该作者

空指针究竟指向了内存的哪个地方?

NULL is a pointer,it is ambiguous using (void *)0 to express it
in C.
so, for the latest languages, people fixed it.

论坛徽章:
0
90 [报告]
发表于 2005-07-23 19:25 |只看该作者

空指针究竟指向了内存的哪个地方?

1,按照标准来说NULL和0是一样的int *p=new int(0)和int *p=new int(NULL)结果是一样的。

2,int *p=NULL和int *p=0;都是定义指针p并初始化指针p为指向0x00000000的地址(至少WINDOWS操作系统是这样的)。“0x00000000”此地址可理解为空地址。当然你也可以自己写个操作系统或编译器把该地址定为“0xFFFFFFFF",甚至更变态的地址

3,我们没有必要讨论NULL和0的区别。讨论不出结果的,因为操作系统,编译器已经做成这样子了。

char *p1=new char('1');
char *p2="123456";
cout<<p1<<endl;cout<<*p1<<endl;cout<<p2<<endl;cout<<*p2;
char *p3="NULL";char *p3='0';
char *p3=NULL;   char *p3=0;

int *p6=0;int *p7=new int(0);
cout<<p7<<endl;
cout<<*p7<<endl;
搞清楚以上这些就行了。
int *p=0;
int *p=1;//这个是错的;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP