我无法理解我从下面的代码中得到的分段错误:
#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教程?
答案 0 :(得分:4)
这是完全未定义的行为 - 您取消引用未初始化的指针。
实际问题在
printf( "%lld %lld\n", *w, *h);
其他事情只是声明。您不应取消引用w
和h
,因为它们根本没有初始化。这与评论/取消注释前(3)行中的任何一行无关。