免费注册 查看新帖 |

Chinaunix

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

[C] 发一段无聊的 C 代码,读写空指针(NULL)指向的内存区 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-07-17 11:18 |只看该作者
原帖由 rollin7 于 2009-7-17 10:47 发表
你不用mmap试试? 用了mmap相当于系统已自动分配内存了,和直接操作空指针或是野指针完全是两码事

mmap相当于系统已自动分配内存,嗯,直接用MMAP比较好

论坛徽章:
0
12 [报告]
发表于 2009-07-17 11:37 |只看该作者
原帖由 doofy 于 2009-7-17 10:21 发表
按照这个说明 0意味着由实现自由选择起始地址
但确实又是能往0地址写.....


不同的 *nix 系统上实现不一样,看 9 楼给出的 Linux Man Pages,这也是我在一楼给出 uname -a 的原因

原帖由 rollin7 于 2009-7-17 10:47 发表
你不用mmap试试? 用了mmap相当于系统已自动分配内存了,和直接操作空指针或是野指针完全是两码事


。。。
不知道说啥好了,您说的没错。
我们的目的不是抬杠,目的是把问题搞明白:内核如何管理内存、应用程序的地址空间是怎么样的、内存页的访问权限、虚拟地址与物理地址(物理页)的对应关系和转换方法等


原帖由 doofy 于 2009-7-17 10:52 发表
试了下 如果指定了MAP_FIXED,对NULL的读写会成功,如果没有指定,就seg fault了, 怎么个解释法?


还是看 9 楼的 Linux Man Pages,呵呵

原帖由 houtinghua 于 2009-7-17 11:04 发表


NULL 不就等于0吗   如果参数为NULL  不就是代表由系统选择地址吗   也就是说mmap返回的是并不是0-4096的内存地址吧   

估计有人会说有些系统0并不等于NULL

请求lz打印一下内存地址


0 并不等于 NULL 这个好像是有,记得以前有个贴子讨论过,langue 应该记得(好像是哪一版的 WINDOWS 上?),不过如果 NULL != 0,可能会带来一些混乱,比如静态变量的初始化等
如果参数为 NULL ------ 还是依赖于实现,好像标准没给出强制的要求,对比 3 楼和 9 楼的手册吧
内存地址一楼打出来了:
$ gcc tst-mmap.c && ./a.out
(nil): hello mmap
%p 输出 (nil) 意味着指针为空

论坛徽章:
0
13 [报告]
发表于 2009-07-17 13:22 |只看该作者
windaoo  

SORRY,原意理解错误,诚心道歉,呵呵。

论坛徽章:
0
14 [报告]
发表于 2009-07-17 13:50 |只看该作者

回复 #13 rollin7 的帖子

不必不必,怪我没说清楚。
呵呵

论坛徽章:
0
15 [报告]
发表于 2009-07-17 15:38 |只看该作者
原帖由 windaoo 于 2009-7-17 10:57 发表


嗯,langue JJ 发的应该是标准的,俺这是山寨的 Linux 上的实现:

...


没想到langue是JJ,,崇拜中。。

论坛徽章:
0
16 [报告]
发表于 2009-07-18 16:17 |只看该作者
非法地址访问。。。。 这个理解有问题。。。。。

原帖由 windaoo 于 2009-7-17 02:06 发表
如下:

#include
#include
#include
#include
#include

int main()
{
    char *p = NULL;
    size_t len = 4 * 1024;

   &#16 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP