无法解释的分段错误

时间:2013-03-11 05:48:34

标签: c segmentation-fault

由于某些原因,我在这里遇到了分段错误。我不知道为什么。有什么帮助吗?

typedef struct gw_struct{
    int pop;
    int col;
    int row;
    struct district ***gw;
    struct person **people;
};

typedef struct gw_struct *GW;

然后在函数中......

GW world;
struct district ***array = malloc(nrows*sizeof(struct district**));
    int i, j;
for (i = 0; i < nrows; i++)
{
    array[i] = malloc(ncols*sizeof(struct district*));
    for (j = 0; j<ncols; j++)
    {
            array[i][j] = malloc(sizeof(struct district));
    }
}   

world->gw = array; //this is the line that gives the seg fault

2 个答案:

答案 0 :(得分:2)

您的代码未初始化world,因此当您尝试在该行中取消引用时,可能会将其指向某个地方的杂草。确保在使用变量之前初始化变量。

答案 1 :(得分:-1)

您的问题出在第一行GW world;上,但未在内存中正确引用。

这应该有效:

GW *world;
struct district ***array = malloc(nrows*sizeof(struct district**));
    int i, j;
for (i = 0; i < nrows; i++)
{
    array[i] = malloc(ncols*sizeof(struct district*));
    for (j = 0; j<ncols; j++)
    {
            array[i][j] = malloc(sizeof(struct district));
    }
}   

world->gw = array; //this is the line that gives the seg fault

你的世界变量声明需要是一个指针,这将在内存中正确引用你初始化的结构,并允许你进行作业。