为什么printf有助于防止以下代码中的分段错误?

时间:2016-10-26 03:13:34

标签: c segmentation-fault printf

#include<stdio.h>
#define NUMBER_OF_CHARS 256

typedef struct Frequency Frequency;
struct Frequency {
  // Frequency value:
  int  v;
};

typedef struct Context Context;
struct Context {
  Frequency table[NUMBER_OF_CHARS];
};

int main(){
Context* x;
(x->table[0]).v=10;
//printf("%d\n",(x->table[0]).v);
}

如果我注释掉printf,我运行程序然后我得到分段错误;如果我用printf运行程序,那么我将获得值10.为什么会发生?

1 个答案:

答案 0 :(得分:0)

如上面的注释中所述,您使用的是x变量,它是一个指针并且未分配。您可以使用以下内容:

int main(){
    Context x; // you are allocated on the stack a Context value
    x.table[0].v=10; // set the Frequency of first item
    //printf("%d\n",(x.table[0].v);
    return (0);
}

而不是:

int main(){
    Context* x;
    (x->table[0]).v=10;
    //printf("%d\n",(x->table[0]).v);
    return (0);
}