gpt4 book ai didi

c++ - "Grow"动态数组函数产生错误

转载 作者:行者123 更新时间:2023-11-28 06:08:46 27 4
gpt4 key购买 nike

初级程序员在这里。下面的代码似乎总是遇到一个错误,称为:“未分配正在释放的指针”,我不明白为什么。

结构包含动态数组,用于在读取文件后存储整数和字符串。此文件包含城市名称、高温和低温的列表。然后,在读取这些行后将它们存储到动态数组中,并在必要时增加动态数组(大小加倍)。

我是否为这个“增长”代码函数写了一些不正确的东西?

int i = 0;
if ( i >= arr1.size){ //arr1 is a int declared in a struct

string *tempStr; //temporary string
tempStr = new string[arr1.size*2];

int *tempInt; //temporary int
tempInt = new int[arr1.size*2];

for (int a = 0; a < arr1.size; a++){
tempStr[a] = arr1.cityName[a]; //cityName is a dynamic array declared in struct as a string
tempInt[a] = arr1.hiTemp[a]; //hiTemp --> dynamic array declared in struct as an int
tempInt[a] = arr1.loTemp[a]; //loTemp --> dynamic array declared in struct as an int

}

delete[] arr1.cityName;
delete[] arr1.hiTemp;
delete[] arr1.loTemp;

arr1.cityName = tempStr;
arr1.hiTemp = tempInt;
arr1.loTemp = tempInt;

arr1.size = arr1.size*2; //doubling the size
}
i++;

最佳答案

    tempInt[a] = arr1.hiTemp[a];
tempInt[a] = arr1.loTemp[a];

您为两者使用了相同的临时数组。

然后你做:

arr1.hiTemp = tempInt;
arr1.loTemp = tempInt;

所以现在你的结构有两个不同的指针指向同一个数组。

这意味着下次在该结构上运行您的增长算法时,它将到达:

delete[] arr1.hiTemp;
delete[] arr1.loTemp;

因此尝试删除相同的内存两次,这当然是非常糟糕的。

因此您需要修复此问题以使用两个单独的 new int 数组。

(或者将所有这些替换为 std::vector,因为它们更易于管理。)

关于c++ - "Grow"动态数组函数产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31755334/

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