使用libjpeg进行Seg故障

时间:2011-04-29 13:43:45

标签: c segmentation-fault libjpeg

我无法理解我从下面的代码中得到的分段错误:

#include <stdio.h> 
#include <jpeglib.h>
#include <stdlib.h>

int main(int argc, char** argv){
    FILE*                   outfile;
    JSAMPLE*                row_pointer;
    struct jpeg_error_mgr   jerr;
    long long int           *w, *h;

    setSomePointers(w, h);

    printf( "%lld  %lld\n", *w, *h);
}

评论前三个声明中的任何一个都将解决它......

奇怪的是,以下代码有效:

#include <stdio.h> 
#include <jpeglib.h>
#include <stdlib.h>

int main(int argc, char** argv){
    FILE*                   outfile;
    JSAMPLE*                row_pointer;
    struct jpeg_error_mgr   jerr;
    long long int           w, h;

    setSomePointers(&w, &h);

    printf( "%lld  %lld\n", w, h);
}

是否有一些奇怪的事情发生,或者我是否需要点击一些C教程?

1 个答案:

答案 0 :(得分:4)

这是完全未定义的行为 - 您取消引用未初始化的指针。

实际问题在

printf( "%lld  %lld\n", *w, *h);

其他事情只是声明。您不应取消引用wh,因为它们根本没有初始化。这与评论/取消注释前(3)行中的任何一行无关。