2012-04-06 47 views
0
typedef struct _ut_slot { 
    ucontext_t uc; 
    .... 
}*ut_slot; 

static ut_slot* table; //array of the structs 

void foo (int tab_size){ 
    table = malloc (tab_size *(sizeof (ut_slot))); // memory allocation for array of structs 
    for(i = 0 ; i < tab_size ; i++ ){ 
     getcontext(&table[i].uc); <--- ?????? 
     } 
} 

我在「getcontext」字符串中收到錯誤。我如何編寫對數組的任何元素的引用?我怎樣才能用「getcontext」命令初始化每個數組元素的「uc」字段?Getcontext()適用於具有結構的數組元素

回答

0

你必須與ut_slot的定義不一致且它的使用:

typedef struct _ut_slot { 
    ucontext_t uc; 
    .... 
}*ut_slot; //<--- pointer to struct 

你說ut_slot是一個指向一個結構,然後你聲明

靜態ut_slot *表;

所以你有一個指針指向結構的指針。

你可能想ut_slot只是一個結構,或table是一個指向結構的指針。


爲了更精確:table是一個指針到指針到結構,所以table[i]是一個指針到結構,並嘗試與table[i].ut訪問非結構的結構成員,這會產生編譯錯誤。


嘗試以下操作:

typedef struct _ut_slot { 
    ucontext_t uc; 
    .... 
} ut_slot; //removed "*" 

static ut_slot *table; 

你的代碼的其餘部分是好的,不需要改變。

+0

我編輯我的評論。我如何以正確的方式訪問uc字段? – TatianaCooper 2012-04-06 19:24:33

+0

我得到你解釋。它現在起作用了:getcontext(&(* table [i])。uc)); – TatianaCooper 2012-04-06 19:30:06

+0

@TatianaCooper等待,你的malloc調用是錯誤的,因爲sizeof(ut_slot)是一個指針的大小(只有大約4字節),而不是結構的大小 - 使用我編輯的解決方案 – Anthales 2012-04-06 19:31:49

0

爲的getContext手動把來回的原型是這樣的:

int getcontext(ucontext_t *ucp); 

你確定你正在傳遞正確的說法? ;)

如果你真的想要一個結構數組,你必須爲每個結構留出一些內存。 請注意如何 - >取消引用指針,並且&獲取成員結構的地址。它很混亂,看起來倒退。

對不起,我的程序沒有大括號和標點符號。錨C自動添加它們。

#include <stdio.h> 
#include <stdlib.h> 
#include <ucontext.h> 
typedef struct _ut_slot 
    ucontext_t uc 
    ... 
*ut_slot 
static ut_slot *table 
int main void 
    static ucontext_t uc 
    table = malloc 1 * sizeof ut_slot 
    table[0] = malloc sizeof *ut_slot 
    getcontext &table[0]->uc 
    free table[0] 
    free table 
    return 0 
+0

這正是問題所在。我想通過數組元素的美國領域,我不知道如何寫它。 – TatianaCooper 2012-04-06 19:22:36

+0

謝謝!在我改變之前,我有「分段錯誤」錯誤。 – TatianaCooper 2012-04-07 15:53:53