为什么老是出现段错误啊!
以前也出现过,还记得有人说过原因,现在忘记了,只记得还是不懂为什么会出现这种情况!
我用的是Ubuntu 10.4,照着apue写了内存 管理的例子,为什么会这样,然后把别人的例子一看也是这样!段错误/
我用root也是这样,难道是系统问题,求高手解答,!!在线等的!!
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/mman.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <string.h>
- typedef struct{
- char name[4];
- int age;
- }people;
- int main(int argc, char *argv[])
- {
- int fd,i;
- people *p_map;
- char temp;
- fd = open(argv[1],O_CREAT|O_RDWR|O_TRUNC,0777);
- lseek(fd,sizeof(people)*5 - 1,SEEK_SET);//设置文件的大小
- write(fd,"",1);
- p_map = (people *)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
- //注意,mmap只能在进程中映射这么大的空间,而不能改变文件的大小
- close(fd);
- temp = 'a';
- for(i =0;i<10;i++){
- temp += 1;
- memcpy((*(p_map+i)).name,&temp,1);
- (*(p_map+i)).age = 20 + i;
- }
- printf("initialize over\n");
- sleep(10);
- munmap(p_map,sizeof(people)*10);
- printf("unmap OK\n");
- return 0;
- }
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
没问题啊
注意输入文件名
这段代码非常不健壮,少了很多返回值判断。
我看不懂
刚开始会经常遇到段错误的问题,慢慢的就习惯了,其实段错误在非多进程里边还是比较好解决的一类问题
代碼問題
Use ftruncate instead of lseek and write
判断返回值啊,最少open很容易出错吧
没有以空行结束是什么错误?