结构体的成员变量是数组指针,如何对该数组元素赋值

结构体的成员变量是数组指针,怎么对该数组元素赋值?
我的C水平不够好,但是目前要完成一个比较复杂的程序,请大家帮忙看一下。

指定使用的结构体:

typedef struct bb {
  unsigned int start_address;
  unsigned int end_address;
  int n_successors; //number of successor blocks
  struct bb **successors; //array of successor blocks
  int reachable; //if the block is reachable, set to 1, otherwise 0
} BLOCK;

程序需要分析一些数据然后把结果放到相应的BLOCK结构体中。

每个BLOCK可能有不确定个数的successor,successor本身也是BLOCK。

比如:
一共算出来5个BLOCK,BLOCK[1]的successor是BLOCK[4], [2]没有,[3]的是[1][5], [4]的是[5], [5]的是[2]。大概就是这个样子,对应关系要用某种逻辑算出来,不是一目了然的,而且successor的数量一开始是不知道的。

第一步我要通过分析数据算出所有BLOCK的start_address 和 end_address, 所有BLOCK 用 malloc 分配在连续的内存地址,这个完成了。下面我需要遍历这些BLOCK,算出successor。

问题是:我找的当前的BLOCK对应的successor时,怎么把它(们)存到那个successor成员变量里呢?因为每个successor都是已经分配了合法内存的BLOCK,只要把它们的指针存到successors指向的数组里吧?我试验了半天都不成功。请赐教!


void get_successors(BLOCK *blocks, int nblocks) {

  BLOCK *ptr = blocks;

  while (i < nblocks) {
  if (...) {
  ... //假设此处得到一个successor,用指针p表示
   
  ptr->n_successors = 1;
  ptr->successors = ???? //此处怎么写??如何分配内存及赋值?
   
  }
  ptr++;
  }
}

------解决方案--------------------
不知道您是打算怎么用。就是开辟数组,然后存放数据吧??
 ptr->successors = (bb**)malloc(sizeof(bb*)*n);
for(int i =0;i<n;i++)
ptr->successors[i]=(bb*)malloc(sizeof(bb)*m)
------解决方案--------------------
struct bb **successors; //array of successor blocks

这个成员就是为了你的目的存在的.

每次需要增加一个successors,那么realloc(successors, sizeof(struct successors*)(++n_successors));可以扩增一个槽位,把那个地址放到successors[n_successors - 1]位置即可。