标题:Linux下GCC编译通过了这段代码,可是执行的时候说段错误,求大神帮帮忙!
只看楼主
w716169470
Rank: 2
等 级:论坛游民
帖 子:51
专家分:25
注 册:2013-4-18
结帖率:61.54%
已结贴  问题点数:20 回复次数:8 
Linux下GCC编译通过了这段代码,可是执行的时候说段错误,求大神帮帮忙!
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <fcntl.h>
  4 #include <unistd.h>
  5 #include <sys/mman.h>
  6 #define BUFSIZE 1024 * 768 * 2
  7
  8 int main(int argc , char *argv[])
  9 {
 10     int fbfd;
 11     unsigned short *buf;
 12     int i, j;
 13
 14     fbfd = open("/dev/fb",O_RDWR);
 15     buf = (unsigned short *)mmap(NULL, BUFSIZE, PROT_WRITE | PROT_READ, MAP_SHARED, fbfd, 0);
 16
 17     for(i = 0; i < 768; i++)
 18     {
 19         for(j = 0; j < 1024; j++)
 20             {
 21                 buf[j + (i * 1024)] = 65535;
 22             }
 23     }
 24     return EXIT_SUCCESS;
 25
 26 }
搜索更多相关主题的帖子: include Linux 
2014-03-25 23:17
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
得分:5 
那你就gdb跟一下。看出现在哪里呗

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2014-03-26 09:24
wsj3000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:78
专家分:161
注 册:2009-8-4
得分:5 
程序代码:
int main(int argc, char * argv[])
{
    
    int fbfd;
    unsigned short *buf;
    int i, j;
    
    fbfd = open("/dev/fb",O_RDWR);
    if(fbfd < 0)
    {
        fprintf(stderr, "open fail, errno:%u\n", errno);
    }
    
    buf = (unsigned short *)mmap(NULL, BUFSIZE, PROT_WRITE | PROT_READ, MAP_SHARED, fbfd, 0);
    if(buf != MAP_FAILED)
    {
        for(i = 0; i < 768; i++)
        {
            for(j = 0; j < 1024; j++)
            {
                buf[j + (i * 1024)] = 65535;
            }
        }
    }
    else
    {
        fprintf(stderr, "buf fail, errno:%u\n", errno);
    }
    
    return EXIT_SUCCESS;
}



文件没打开,问题是你没权限访问/dev/目录, 需要root权限:
可以尝试sudo ./a.out
2014-03-27 13:42
Andrew_Lee
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:185
专家分:626
注 册:2014-3-21
得分:5 
我看了下,也没调好。。主要是在调用mmap的时候失败了,主要还有个:文件打开了就要关闭,还有个就是不要申请那么大的空间,将近1.5个G,
2014-03-30 16:16
klapset
Rank: 4
等 级:业余侠客
威 望:2
帖 子:71
专家分:234
注 册:2014-2-27
得分:5 
回复 4楼 Andrew_Lee
你能教教我 是怎么算出要用1.5G空间的么? 我真心是要感谢你。 你师承何处?
2014-03-31 23:31
Andrew_Lee
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:185
专家分:626
注 册:2014-3-21
得分:0 
映射区的长度1024*768*2 那就是1572864个字节,那可不是就是1.5个G
2014-04-01 08:46
klapset
Rank: 4
等 级:业余侠客
威 望:2
帖 子:71
专家分:234
注 册:2014-2-27
得分:0 
1024 * 1024 * 1024 = 1073741824 byte = 1 Gbyte
1024 * 768 * 2 = 1.5 Gbyte?
我真的不知道怎么形容你了。
2014-04-01 15:37
klapset
Rank: 4
等 级:业余侠客
威 望:2
帖 子:71
专家分:234
注 册:2014-2-27
得分:0 
想也想得到
framebuffer 显示一张图而已, 分辨率为1024 x 768 , 16位色 ,这1080p都赶不上, 你一张图就是1.5G,那我想问问,一部1分钟的电影,你知道要多大么?反正你们家硬盘肯定是不够的。
2014-04-01 15:39
Andrew_Lee
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:185
专家分:626
注 册:2014-3-21
得分:0 
e  少算了一个,,
2014-04-02 14:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-429163-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024230 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved