2015-04-02 150 views
2

內的malloc我有這樣的層次結構:C指針功能調用

main() 
{ 
    int i; 
    myStruct *devices = NULL; 
    myFunc1(&devices); 

    for (i = 0; i < 5; i++) 
    { 
     printf("MAC: %s, Name: %s, COD: %s\n\r", devices[i].field1, devices[i].field2, devices[i].field3); 
    } 
} 

void myFunc1(myStruct **devices) 
{ 
    myFunc2(devices); 
} 

void myFunc2(myStruct **devices) 
{ 
    int i; 
    *devices = malloc(sizeof(myStruct) * 5); 

    for (i = 0; i < 5; i++) 
    { 
     (*devices[i]).field1 = "test1"; 
     (*devices[i]).field2 = "test2"; 
     (*devices[i]).field3 = "test3"; 
    } 
} 

在主當我訪問設備[I],其中i = 0,它是確定,但是,當I> 0段錯誤發生,我可以不明白如何正確訪問它。

+0

編譯所有警告和調試信息('GCC -Wall -Wextra -g')。 **如果可用,請使用調試器**('gdb')和[valgrind](http://valgrind.org/)。 – 2015-04-02 11:18:22

+1

@Dabo:不,這是一個編譯錯誤。顯然代碼不完整。 – 2015-04-02 11:22:44

回答

4

由於operator precedence表達式*devices[i]被解析爲*(devices[i]),這不是您想要的。您想改用(*devices)[i]

+0

謝謝。一段時間以來一直在努力解決這個問題,從來沒有想過這個問題是在分配。 :) – 2015-04-02 11:22:47

3

我相當肯定

(*devices[i]) 

應該

((*devices)[i]) 

由於[]運算符的優先級高於*運算符。你想取消引用指針,然後訪問數組。

0

我認爲問題在於你正在調用錯誤的結構。首先,嘗試替代

*devices[i]).field1 

*devices[i])->field1