我在检查结构中的指针是否为空时遇到了一些问题,这是我的代码:
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;
答案 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);