【问题标题】:dynamic allocation for structs and setting a pointer结构的动态分配和设置指针
【发布时间】:2012-09-04 07:57:12
【问题描述】:

我为一个结构分配了 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'

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

谢谢!

【问题讨论】:

  • 你说的内容等同于n + 2 = 5;。这是没有意义的。你的意思是n = 5 - 2;

标签: c pointers data-structures xml-parsing


【解决方案1】:

如果我的理解是正确的,你想将一个项目附加到结构 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;

【讨论】:

  • 但是我该怎么做 arr[x] ?我已经动态分配了 childrenArray .. 所以当我做 childrenArra[x] 时它没有意义,不是吗? pChild 已经是一个已分配的指向所需结构的指针
  • 我正在使用 resalloc,只是没有写它,因为这不是主要问题,所以我不想丢弃这个页面:)
猜你喜欢
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
相关资源
最近更新 更多