Cygwin中的分段错误和默认变量初始化

时间:2013-08-21 13:03:21

标签: c gcc compiler-construction struct cygwin

为什么在Cygwin中编译时if语句会导致分段错误?通过GCC在Linux中进行编译虽然有效。

经过一些研究,我发现可能是因为struct int变量默认情况下没有初始化为0?

但是,C不会将所有全局变量和静态变量初始化为0吗? struct test是一个全局结构,所以它为什么不初始化为0?

int x;  
int count = 20;

struct test {
        int ID;
       };
       typedef struct test GG;
       GG *ptr[200];

    int main(int argc, char const *argv[])
    {
        for(x = 0; x<count; x++) {
            if(!(*ptr[x]).ID){
                printf("true\n");
            }
        }
        return 0;
    }

1 个答案:

答案 0 :(得分:3)

GG *ptr[200]; ptr是指向GG类型结构的指针数组。您正在尝试访问这些没有任何内存位置的指针。

您需要为此数组的每个指针分配内存,如下所示 -

  for(x = 0; x<200; x++)
ptr[x] = malloc(sizeof(struct test));