gpt4 book ai didi

c - 在 C 中动态重新分配结构数组

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

<分区>

我的部分代码将从文本文件中读取未知数量的行,将该行解析为一个结构 (tempSomeStruct),调整 SomeStruct_Array 的大小,然后将该 tempSomeStruct 添加到内存中新打开的位置。

但是在 while 循环几次后,我的程序停止并说

myApplication.exe has triggered a breakpoint.

我没有设置断点,并且做了一些挖掘,看起来断点是由于我调用 realloc 造成的堆损坏。我对动态分配很陌生,所以虽然我已经搜索并找到了一些可能的原因,但到目前为止还没有任何修复工作。

在这种情况下,我如何破坏堆,我该怎么做才能避免这种情况发生?


我有这样一个函数:

int growArray(SomeStruct **SomeStruct_Array,int currentSize, int numNewElements)
{
const int totalSize = currentSize + numNewElements;
SomeStruct *temp = (SomeStruct*)realloc(*SomeStruct_Array,(totalSize * sizeof(SomeStruct)));
if (temp == NULL)
{
printf("Cannot allocate more memory.\n");
return 0;
}
else
{
*SomeStruct_Array = temp;
}

return totalSize;
}

它在其他地方是这样调用的:

SomeStruct* SomeStruct_Array = (SomeStruct *) calloc(1,sizeof(SomeStruct));
int Error_Array_Size = 0;

if(SomeStruct_Array == NULL)
{
printf("Cannot allocate initial memory for data\n");
return;
}

while(fgets(line,sizeof(line), file) != NULL)
{
parseTextIntoSomeStruct(line, &tempSomeStruct);
SomeStruct_Array_Size = growArray(&SomeStruct_Array,SomeStruct_Array_Size,1);
if(SomeStruct_Array_Size > 0)
{
SomeStruct_Array[SomeStruct_Array_Size] = tempSomeStruct;
}
}

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