2013-03-11 93 views
0

由於某些原因,我在此處收到了分段錯誤。我不知道爲什麼。任何幫助?無法解釋的分段錯誤

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

你有沒有intialise指針世界? – 999k 2013-03-11 05:51:48

回答

2

您的代碼不會初始化world,所以想必它指向方向,誤入歧途某處當您嘗試取消對它的引用在該行。確保在使用它們之前初始化變量。

+0

我改變了初始化,但它仍然不起作用。 – SwiftCore 2013-03-11 05:53:00

+0

現在會發生什麼? – 2013-03-11 05:53:58

+0

在同一地點發生Seg故障... – SwiftCore 2013-03-11 05:54:23

-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 

你的世界變量聲明必須是一個指針,這將正確引用您的初始化結構在內存中,可以讓你讓你的任務。

+0

請添加一些細節,爲什麼您發佈此代碼,以及它如何幫助解決問題。 – Hamad 2014-10-30 05:34:13