use*_*601 2 c memory-management
我正在尝试在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++;
}
Run Code Online (Sandbox Code Playgroud)
欢迎任何建议.提前致谢
几点.
你不需要做那if(myStruct->connector == 0)件事.realloc如果传递NULL指针将分配内存.根据手册页:如果ptr是NULL,则malloc(size)对于所有大小值 ' ,该调用等效于.
您的typedef struct功能是合法的,但您应该注意它们没有被调用.
我看不到的地方counter被初始化为零或connector到NULL.这可能是因为您没有粘贴整个程序.
我认为实际的问题是你正在分配counter数据结构sizeof(MyStructureStr).sizeof(MyDataStructureStr)如果我明白你在做什么,这应该是.这可能是堆损坏的原因,但没有完整的程序,很难说.
程序中的其他东西(你还没有粘贴)可能会破坏堆.
valgrind 是调试此类问题的最佳方法