malloc에서 세그먼테이션 오류입니다ㅠㅠ

curajc의 이미지

이미지를 받아서 뿌려주는 쏘스를 작성했는데요,

중간에 malloc으로 메모리를 할당하는 부분에서 계속 오류가 납니다.

혹시 메모리가 부족한가 해서 realloc으로도 해봤는데 똑같이 오류가 나구요.

malloc(10)해서 조금만 잡아보아도 마찬가지입니다ㅠㅠ

malloc부분만 가면 세그먼트 폴트가 나면서 실행이 안됩니다.

잘은 모르겠지만 메모리 부족 문제는 아닌듯 한데...

당췌 이유를 잘 모르겠습니다.ㅠㅠ 좀 도와주세요~~

nthroot의 이미지

소스를 올려주시면 도움이 되겠지만 malloc 하기 이전에 이미 메모리가 새고 있기 때문입니다. 차근차근 살펴보세요. ^^

------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.

curajc의 이미지

어디서 새는지 잘 모르겠습니다ㅠㅠ

메모리 관한건 mmap쓴거 밖에 없는데... 그 함수 부분에서는 잘못된게

없는 것 같아서요....

#define WIDTH 320
#define HEIGHT 240
                                                                                                                             
static struct video_mbuf mbuf;
static struct video_mmap vmap;
                                                                                                                             
static unsigned char *mframe;
static int fno;
                                                                                                                             
unsigned char *v4l_capture(int);
void *image_buffer;
                                                                                                                             
int main()
{
    static int fd;
    int depth = 24;
    struct video_capability *cap;
    struct video_channel *chan;
    struct video_window *win;
    struct video_picture *pic;
                                                                                                                             
    if((fd = open("/dev/video0", O_RDONLY))==-1){
        fprintf(stderr, "open: %s\n", strerror(errno));
        exit(1);
    }
                                                                                                                             
    if((ioctl(fd, VIDIOCGCAP, cap))<0){
        fprintf(stderr, "VIDIOCGCAP: %s\n", strerror(errno));
         exit(1);
     }

if(ioctl(fd, VIDIOCGMBUF, &mbuf)==-1){
        fprintf(stderr, "VIDIOCGMBUF: %s\n", strerror(errno));
        exit(1);
    }
                                                                                                                             
    if((mframe = (char *)mmap(0, mbuf.size, PROT_READ, MAP_SHARED, fd, 0))==((void*)-1)){
        fprintf(stderr, "mmap: %s\n", strerror(errno));
        exit(1);
    }
                                                                                                                             
    vmap.frame = 0;
    vmap.width = WIDTH;
    vmap.height = HEIGHT;
    vmap.format = VIDEO_PALETTE_YUV420P;
                                                                                                                             
        if(ioctl(fd, VIDIOCMCAPTURE, &vmap)==-1){
            fprintf(stderr, "VIDIOCMCAPTURE: %s\n", strerror(errno));
            exit(1);
        }
                                                                                                                             
        if(ioctl(fd, VIDIOCSYNC, &vmap)==-1){
            fprintf(stderr, "VIDIOCMCSCYNC failed\n");
            exit(1);
        }                                                                                                                             
                                                                                                                                                                                                                                                             
    if((image_buffer = (char *)malloc(WIDTH*HEIGHT*3))==NULL)
    {
        fprintf(stderr, "failed:%s\n", strerror(errno));
        exit(1);
    }
    yuv2rgb_init();
    yuv2rgb(image_buffer, mframe, WIDTH*3, WIDTH, HEIGHT);

    xlib_display(image_buffer);
    free(image_buffer);
}

:cry: :cry:

익명 사용자의 이미지

mmap있는 줄에 mbuf.size가 제대로 설정되어 있나요?

curajc의 이미지

따로 지정하지 않고, VIDIOCGMBUF를 통해 얻은 원래 size를
그대로 쓰고 있습니다. size를 지정해야 하나요?

익명 사용자의 이미지

                                           
    if((ioctl(fd, VIDIOCGCAP, cap))<0){ 
        fprintf(stderr, "VIDIOCGCAP: %s\n", strerror(errno)); 
         exit(1); 
     } 

cap는 할당이 안되어 있는것같은데 .....

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.