struct 包 struct 的 pointer會有問題 煩請幫忙

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

struct 包 struct 的 pointer會有問題 煩請幫忙

文章rz600000 » 週四 12月 13, 2007 3:05 pm

struct 包 struct 的 pointer會有問題 煩請幫忙

struct gogo
{

int ok;
};
struct go
{
int num;
char * name;
struct gogo *gogo2;
};


int main()
{

struct go chu;
chu.num = 20;
chu.name = "cool";

chu.gogo2->ok = 99999;

printf("num %d \n",chu.num);
printf("name %s \n",chu.name);

printf("gogo2 num is %d\n",chu.gogo2->ok);

}

會有Segmentation fault 錯誤 煩請各位幫忙 謝謝
rz600000
可愛的小學生
可愛的小學生
 
文章: 44
註冊時間: 週日 10月 22, 2006 10:18 pm

文章訪客 » 週四 12月 13, 2007 3:40 pm

hi, rz600000:

struct go chu;後,會將struct go的記憶體空間建立起來,
但指向 struct gogo *gogo2一開始是不會被建立起來的
(也就是指向NULL),
所以你必須要自己建struct gogo的記憶體空間,
使用malloc(sizeof(struct gogo));
或者自行新增strcut gogo abc;
再將abc的位址指定給chu.gogo2...
chu.gogo2 = &abc;
訪客
 

文章rz600000 » 週四 12月 13, 2007 3:48 pm

太感謝您了 謝謝
那還有就是 我上面那個
chu.name 是否也要 多加一行

chu.name = malloc(char * 100);

是因為沒有配置name 這個東西的記憶體空間

再次感謝 謝謝
rz600000
可愛的小學生
可愛的小學生
 
文章: 44
註冊時間: 週日 10月 22, 2006 10:18 pm

文章rz600000 » 週四 12月 13, 2007 3:52 pm

所以我再加上兩行就好了
chu.name = malloc(char * 100);
chu.gogo2 = malloc(sizeof(struct gogo));
加上這兩行就好了嗎 還有什麼錯誤嗎 煩請指正


還有就是那行chu.name = (char *)malloc(100);
好像不加也不會錯 是因為剛好嗎
rz600000
可愛的小學生
可愛的小學生
 
文章: 44
註冊時間: 週日 10月 22, 2006 10:18 pm

文章訪客 » 週四 12月 13, 2007 4:11 pm

chu.name = malloc(char * 100);
(語法怪怪的: malloc(sizeof(char)*100) )
chu.name = "cool";
二者的方式不同:

malloc(char * 100);是在程式執行期動態建立一個空的記憶體空間給chu.name,
而這記憶體的大小是100 個sizeof(char)

至於chu.name = "cool";則是在compile時期就決定好的記憶體大小sizeof(char) * 5
二者的觀念及使用都不太相同哦..^^
訪客
 

文章rz600000 » 週四 12月 13, 2007 4:22 pm

那假若 我是要動態輸入他的名子呢?


是否就應該要 malloc(char * 100);(假若name所需空間少於100)
動態建立一個空的記憶體空間給chu.name呢?

再次感恩
rz600000
可愛的小學生
可愛的小學生
 
文章: 44
註冊時間: 週日 10月 22, 2006 10:18 pm


回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客