struct中的检查指针为NULL

时间:2016-05-06 09:56:08

标签: 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( &nbTypeFourmib, sizeof( unsigned char))==-1) {
            exit(EXIT_FAILURE);
        }
    }
}

我的结构:

typedef struct {
    unsigned short foodSpawnfreq;
    unsigned short foodUnit;
    unsigned char sourceFood;
    Case** cases;
    TypeFourmi** TypeFourmi;
    TypeFourmi** TypeBibibte;
} zone;

typedef struct{
    fourmiliere* fourmilier;
    bibite* bibit;
    fourmis* fourmi;
    char obstacle;
} Case;

2 个答案:

答案 0 :(得分:0)

您的结构指定case的类型为Case**。但是,您要为其分配Case*

您需要做的是改变:

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

要...

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

在你的循环中......

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

// initialise data

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

答案 1 :(得分:0)

试试这个

if((NULL != c) && c->fourmilier)

我认为你实际上需要像

这样的东西
z->cases = new Case[300];

而不是

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