C 结构中的检查指针为空

C 结构中的检查指针为空,c,pointers,segmentation-fault,C,Pointers,Segmentation Fault,我在检查我的结构中的指针是否为空时遇到了一些问题,这是我的代码: zone* z = malloc(sizeof(zone)); z->cases = malloc(sizeof(Case)*300); for(i = 0; i < 300; i++) { Case* c = z->cases[i]; if(c->fourmilier) // HERE IS RAISE SEGMENTATION FAULT { if(read(

我在检查我的结构中的指针是否为空时遇到了一些问题,这是我的代码:

zone* z = malloc(sizeof(zone));
z->cases = malloc(sizeof(Case)*300);

for(i = 0; i < 300; i++)
{
    Case* c = z->cases[i];

    if(c->fourmilier) // HERE IS RAISE SEGMENTATION FAULT
    {
        if(read( &nbTypeFourmib, sizeof( unsigned char))==-1) {
            exit(EXIT_FAILURE);
        }
    }
}

您已将
case
的类型指定为
case**
。但是,您正在为其分配一个
案例*

您需要做的是改变:

z->cases = malloc(sizeof(Case)*300);

在你的循环中

z->cases[i] = malloc(sizeof(Case));

// initialise data

Case* c = z->cases[i];
试试这个

if((NULL != c) && c->fourmilier)
我认为你实际上需要这样的东西

z->cases = new Case[300];
而不是

z->cases = malloc(sizeof(Case)*300);

原来的问题看起来像C(因此我将其标记为C),如果是这种情况,则没有
new
关键字:)我没有注意标记:(将type改为
case**
改为
case*
,并使用
case*C=&z->cases[I]会简单得多);
取而代之。@user694733是的,但很难说这段代码的最终目标是什么,所以我选择了直达路线
z->cases = new Case[300];
z->cases = malloc(sizeof(Case)*300);