2016-12-27 66 views
-2

這是用於C語言和Ubuntu的。如何爲value1添加值[i] - > value2?

我目前停留在這個問題:

struct dretva { 
    int id; 
    int p; 
    int prio; 
    int rasp; 
}; 

struct dretva *P[5]; 

int nove[6][5] = 
{ 
    { 1, 3, 5, 3, 1 }, 
    { 3, 5, 6, 5, 1 }, 
    { 7, 2, 3, 5, 0 }, 
    { 12, 1, 5, 3, 0 }, 
    { 20, 6, 3, 6, 1 }, 
    { 20, 7, 4, 7, 1 }, 
}; 

我如何增加價值爲P? 我這樣做是這樣的:

P[0]->id=nove[0][2]; 

,但是當我用printf的寫像這樣:

printf("%d",P[0]->id); 

它說Segmention故障(核心轉儲),這意味着P [0] - > ID沒有價值。怎麼樣?如何爲P [0] - > id添加值?

謝謝。

+0

你忘了分配內存。看Coderredoc的回答。 –

+0

你需要P是一個指針數組嗎?不會'struct dretva P [5]'夠了嗎? – zoska

回答

3

將內存分配給這些結構指針後,您可以添加您添加或提到的問題。

如果你使用,你需要給它一些內存,你可以把它指向指針...

現在你得到錯誤,因爲那..(無內存分配) 添加此行並用值啓動它們。由4386427

struct dretva *P = malloc(5 * sizeof(struct drevta)); 
if (P == NULL) { 
    exit(1); 
} 

其良好的實踐

for(int i=0;i<5;i++) 
    P[i]=malloc(sizeof(struct dretva)); 

簡單的方式指出後釋放內存。

+0

它說dretva由於某種原因未申報。 –

+0

顯示確切的錯誤@IvanKralj – coderredoc

+0

哦yea..sorry我以爲你typedefed – coderredoc

1

分配struct!而非指向struct,像這樣:

struct dretva P[5]; 
//   ^
//  no asterisk 
P[0].id=nove[0][2]; 
//^
// dot in place of -> 

目前,您分配指針,未設置爲指向實際struct S,所以在讀取或寫入對他們來說是不確定的行爲。

相關問題