我为结构分配了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'
复制所有值...只是为了让它指向孩子
谢谢!
答案 0 :(得分: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;