我正在尝试在C中编写代码,我面临realloc的问题。代码在某些时候工作正常,但在另一时间重新分配期间崩溃并出现Heap Corruption错误。 我已经粘贴了将数据填充到其中的结构和函数。任何人都可以告诉我,如果我在这里做错了什么。
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++;
}
欢迎任何建议。 提前致谢
答案 0 :(得分:5)
几点。
您不需要执行if(myStruct->connector == 0)
事情。如果传递realloc
指针,NULL
将分配内存。根据手册页:如果ptr
为NULL
,则对于所有大小为的值,该调用等同于malloc(size)
。
您的typedef struct
函数是合法的,但您应该注意它们没有被调用。
我看不到counter
被初始化为零或connector
到NULL
的位置。这可能是因为您没有粘贴整个程序。
我认为实际问题是您正在分配counter
的{{1}}数据结构。如果我理解你在做什么,这应该是sizeof(MyStructureStr)
。这可能是堆损坏的原因,但如果没有完整的程序,则很难说清楚。
程序中的其他内容(您尚未粘贴)可能会破坏堆。
sizeof(MyDataStructureStr)
是调试此类问题的最佳方法