初级程序员在这里。 下面的代码似乎总是遇到一个错误,称为:“未分配正在释放的指针”,我不明白为什么。
结构包含动态数组,用于在读取文件后存储整数和字符串。此文件包含城市名称、高温和低温的列表。然后,在读取这些行后将它们存储到动态数组中,并在必要时增加动态数组(大小加倍)。
我是否为这个“增长”代码函数写了一些不正确的东西?
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/