为什么老是出现段错误啊!

发布于 2022-10-15 10:16:57 字数 1314 浏览 65 评论 0

以前也出现过,还记得有人说过原因,现在忘记了,只记得还是不懂为什么会出现这种情况!
我用的是Ubuntu 10.4,照着apue写了内存 管理的例子,为什么会这样,然后把别人的例子一看也是这样!段错误/
我用root也是这样,难道是系统问题,求高手解答,!!在线等的!!

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/mman.h>
  4. #include <sys/types.h>
  5. #include <unistd.h>
  6. #include <fcntl.h>
  7. #include <string.h>
  8. typedef struct{
  9. char name[4];
  10. int age;
  11. }people;
  12. int main(int argc, char *argv[])
  13. {
  14. int fd,i;
  15. people *p_map;
  16. char temp;
  17. fd = open(argv[1],O_CREAT|O_RDWR|O_TRUNC,0777);
  18. lseek(fd,sizeof(people)*5 - 1,SEEK_SET);//设置文件的大小
  19. write(fd,"",1);
  20. p_map = (people *)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
  21. //注意,mmap只能在进程中映射这么大的空间,而不能改变文件的大小
  22. close(fd);
  23. temp = 'a';
  24. for(i =0;i<10;i++){
  25. temp += 1;
  26. memcpy((*(p_map+i)).name,&temp,1);
  27. (*(p_map+i)).age = 20 + i;
  28. }
  29. printf("initialize over\n");
  30. sleep(10);
  31. munmap(p_map,sizeof(people)*10);
  32. printf("unmap OK\n");
  33. return 0;
  34. }

复制代码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

自我难过 2022-10-22 10:16:57

没问题啊
注意输入文件名

尹雨沫 2022-10-22 10:16:57

这段代码非常不健壮,少了很多返回值判断。

伊面 2022-10-22 10:16:57

我看不懂

三岁铭 2022-10-22 10:16:57

刚开始会经常遇到段错误的问题,慢慢的就习惯了,其实段错误在非多进程里边还是比较好解决的一类问题

无名指的心愿 2022-10-22 10:16:57

代碼問題

老街孤人 2022-10-22 10:16:57

Use ftruncate instead of lseek and write

疯了 2022-10-22 10:16:57

判断返回值啊,最少open很容易出错吧

意中人 2022-10-22 10:16:57

没有以空行结束是什么错误?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文