首页 > 解决方案 > 初始化包含指向另一个结构的结构指针的结构

问题描述

所以我提前为可能无法很好地表达这一点而道歉。我对此很陌生,并且正在学习。我正在寻找初始化一个结构,该结构具有指向其中另一个结构的结构指针。检查下面。

struct GraphicElement {
    char* fileName;
    struct GraphicElement* pNext;
    };
struct RasterGraphic {
    struct GraphicElement* GraphicElements;
};

我正在编写函数来添加或删除图形元素,但在此之前我调用了一个函数,我想在其中进行初始化,这是我遇到问题的地方。

int main(void)
{
    char response;
    BOOL RUNNING = TRUE;
    struct RasterGraphic RG;
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    InitRasterGraphic(&RG);
}

我在这里和下面调用 init 将是我的尝试。

void InitRasterGraphic(struct RasterGraphic* pA)
{

pA->GraphicElements = malloc(sizeof(struct GraphicElement));
pA->GraphicElements = 0;
return; 
}

我已经尝试了很多其他的事情,但似乎没有一个与我想做的事情一起工作。我想初始化一切。我有另一个打印元素的函数,但它崩溃了,我收到一个错误,它无法读取 fileName 和 pNext 所在的内存。这也是我第一次在这里发布问题。我希望我已经涵盖了我所有的基础并且我问得正确。谢谢你。

标签: cstructinitialization

解决方案


您正在初始化pA->GraphicElements为错误NULL后立即进行初始化malloc,这会导致内存泄漏。

可能你想尝试如下。

void InitRasterGraphic(struct RasterGraphic* pA)
{
   pA->GraphicElements = malloc(sizeof(struct GraphicElement));

   if (pA->GraphicElements == NULL) return;

   pA->GraphicElements->pNext = NULL;
   pA->GraphicElements->fileName = NULL;

   /** or
    pA->GraphicElements->fileName = malloc(sizeof(char)*(somelength));
    */

   return; 
}

推荐阅读