Getcontext()适用于带有结构的数组元素

时间:2012-04-06 19:00:39

标签: c arrays malloc

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); <--- ?????? 
      }
}

我在&#34; getcontext&#34;中收到错误串。如何编写对数组中任何元素的引用?我如何用&#34; getcontext&#34;初始化?命令&#34; uc&#34;每个数组元素的字段?

2 个答案:

答案 0 :(得分:0)

您与ut_slot的定义及其使用不一致:

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

你说ut_slot是指向结构的指针,然后你声明

  

static ut_slot * table;

所以你有一个指向结构的指针。

您可能希望ut_slot只是一个结构,或table是指向结构的指针。


更确切地说:table是指向结构的指针,因此table[i]是指向结构的指针,并且您尝试访问非结构的成员-struct with table[i].ut,这会引发编译错误。


尝试以下方法:

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

static ut_slot *table;

其余代码没问题,无需更改。

答案 1 :(得分:0)

getcontext手册提出了这样的原型:

int getcontext(ucontext_t *ucp);

你确定你传递了正确的论据吗? ;)

如果你真的想要一个结构数组,你必须为每个结构留出一些内存。 请注意 - &gt;取消引用指针和&amp;获取成员结构的地址。这令人困惑,并且向后看。

抱歉,我的程序没有大括号和标点符号。 Anchor 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