0

我基本上是在尝试创建一个结构指针数组。这些指针中的每一个都应该指向同一结构数组的另一个元素,即 BLOCKS[2]。

这是我到目前为止所做的。

typedef struct bb {
      ..
      ..
      ..
    struct bb **successor;
} BLOCK;

BLOCK BLOCKS[10];

struct bb **A = malloc(sizeof(struct bb*)*5);        //create an array of pointers of type struct bb, 5 units i.e A[0]->A[4]. 

BLOCKS[0].successors = A                            //just assigning

现在......如何将指针数组的第一个元素 A 分配给另一个结构?

我试过:

A[0] = &BLOCKS[6];

它编译得很好,但我得到了一个段错误。

4

2 回答 2

1

你试过这个:

typedef struct bb {
      ..
      ..
      ..
    struct bb *successor;
} BLOCK;

BLOCK BLOCKS[10];

struct bb *A = malloc(sizeof(struct bb)*5);        //create an array of pointers of
type struct bb, 5 units i.e A[0]->A[4]. 

BLOCKS[0].successors = A[0];

因为在快速查看之后,我认为 ** 应该呈现为 * 并且您的 malloc 保留的内存不是 5 个结构的大小,而是 5 个指向该结构的指针的大小。

于 2012-05-21T12:03:24.437 回答
0

引用问题:我基本上是在尝试创建一个结构指针数组。

结构指针数组应该是

BLOCK *ptrBlockArr[10]; //This an array of size 10, which can store 10 pointers to the structure BLOCK

现在,由于这些是指针,您将为每个元素分配内存。这应该像

for(int i=0; i<10; i++)
{
   ptrBlockArr[i] = (BLOCK *)malloc(sizeof(BLOCK));
}

您的问题还包括:这些指针中的每一个都应该指向同一结构数组的另一个元素。这可以像

for(int i=0; i<9; i++) // Run the loop till the last but one element
{
  ptrBlockArr[i]->successor = ptrBlockArr[i+1];
}
//Assign the last's element's sucessor as the first element. This will make it circular. Check if this is your intention
ptrBlockArr[9]->successor = ptrBlockArr[0]

请注意,在您的结构successor中是struct bb**,而应该是struct bb*

此外,您可以优化代码以将我上面显示的两个循环组合成一个循环。我将把它留给你自己学习和实施。

于 2012-05-21T12:24:42.807 回答