gpt4 book ai didi

c - Realloc 导致堆损坏

转载 作者:行者123 更新时间:2023-12-02 04:35:35 25 4
gpt4 key购买 nike

我正在尝试用 C 语言编写代码,但我遇到了 realloc 问题。该代码在某个时间点运行良好,但在另一时间重新分配期间因堆损坏错误而崩溃。我已将填充数据的结构和函数粘贴到其中。如果我在这里做错了什么,谁能告诉我。

typedef struct MyDataStructureStr
{
MyDataStructureStr()
{
val1 = -1;
val2 = -1;
}

int val1;
int val2;
} MyDataStructureStr, *MyDataStructurePtr;

typedef struct MyStructureStr
{
MyStructureStr()
{
connector = NULL;
counter = 0;
}

MyDataStructurePtr connector;
int counter;
}MyStructureStr, *MyStructurePtr;

static void storeData(int first, int second)
{
if(myStruct->connector == 0)
myStruct->connector = (MyDataStructurePtr)malloc(sizeof(MyDataStructureStr);
else
myStruct->connector = (MyDataStructurePtr)realloc(myStruct->connector, sizeof(MyDataStructureStr) * (myStruct->counter + 1));

myStruct->connector[myStruct->counter].val1 = first;
myStruct->connector[myStruct->counter].val2 = second;
myStruct->counter++;
}

欢迎提出任何建议。提前致谢

最佳答案

几点。

  1. 您不需要执行 if(myStruct->connector == 0) 操作。如果传递了一个NULL 指针,realloc 将分配内存。根据手册页:如果 ptrNULL,则调用等同于 malloc(size),对于大小的所有值'。

  2. 您的 typedef struct 函数是合法的,但您应该注意它们没有被调用。

  3. 我看不到 counter 在哪里被初始化为零或 connector 被初始化为 NULL。这可能是因为您没有粘贴整个程序。

  4. 我认为实际问题是您正在分配sizeof(MyStructureStr)counter 数据结构。这应该是 sizeof(MyDataStructureStr) 如果我明白你在做什么。这可能是堆损坏的原因,但如果没有完整的程序,很难判断。

  5. 程序中的其他内容(您尚未粘贴)可能正在破坏堆。

  6. valgrind 是调试此类问题的最佳方式

关于c - Realloc 导致堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22064106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com