0

我为一个结构分配了 5 个位置——其中每个 CELL 都是指向该结构的指针。现在我希望第二个单元格指向我的结构,但我得到一个错误:表达式必须是一个可修改的值。我明白我正在重新定位我的指针,但我不明白如何在不复制所有值的情况下修复它。

这是我正在使用的示例:(相关内容)

    typedef struct childrenArray
{
    PXML_ELEMENT    childrenArray;
     UINT32         numOfChildren;
     UINT32         maxNumOfChildren;
 }CHILDREN_ARR,*PCHILDREN_ARR;




 typedef struct xml_Element
 {    
     PDATA_ELEMENT           pData;
     PCHILDREN_ARR          pChildrenArr;
     PXML_ELEMENT           pParent;
     PATTR_ARR              pAttributeArr;
     UINT32                     depth;
  };

当我创建子数组时:代码是:

PCHILDREN_ARR retArr;
retArr->childrenArray = (PXML_ELEMENT)Calloc(retArr->maxNumOfChildren ,sizeof(XML_ELEMENT)); /*my max is 5 .. */

现在我得到了问题:我想使用这个功能:

XML_STATUS xml_AddChildToEndArray(PXML_ELEMENT pChild , PXML_ELEMENT pParent)
{
     pParent->pChildrenArr->childrenArray + pParent->pChildrenArr->numOfChildren = pChild;
}

我得到了错误...我可以解释为什么它是错误的,我该如何解决它?

我不想:

'currentCell ->name = pChild-> name'

复制所有值......只是为了让它指向孩子

谢谢!

4

1 回答 1

0

如果我理解你是正确的,你想将一个项目附加到childrenArray结构中的“数组”childrenArray吗?

首先,您必须确保为新阵列分配了足够的空间。这可以通过例如来完成realloc

也许是这样的:

/* Allocate space for one more entry */
pParent->pChildrenArr->childrenArray =
    realloc(pParent->pChildrenArr->childrenArray,
            (pParent->pChildrenArr->numOfChildren + 1) * sizeof(XML_ELEMENT));

/* Copy the entry to the new place */
pParent->pChildrenArr->childrenArray[pParent->pChildrenArr->numOfChildren] = *pChild;

/* One more child now */
pParent->pChildrenArr->numOfChildren++;

编辑:似乎您已经分配了一个具有最大条目数的数组,那么您不必重新分配:

if (pParent->pChildrenArr->numOfChildren < pParent->pChildrenArr->maxNumOfChildren)
{
    pParent->pChildrenArr->childrenArray[pParent->pChildrenArr->numOfChildren] = *pChild;
    pParent->pChildrenArr->numOfChildren++;
}

如果你想在需要的时候增加数组的大小,你必须结合这两种方法:

PCHILDREN_ARR pArray = pParent->pChildrenArr;

if (pArray->numOfChildren >= pArray->maxNumOfChildren)
{
    /* We need to reallocate */
    pArray->maxNumOfChildren += 5;

    pArray->childrenArray = realloc(pArray->childrenArray,
                                    pArray->maxNumOfChildren * sizeof(XML_ELEMENT));
}

pArray->childrenArray[pArray->numOfChildren++] = *pChild;
于 2012-09-04T08:15:12.427 回答