“Grow"用于生成错误的动态数组的函数
"Grow" function for dynamic arrays generating an error
这里是初级程序员。下面的代码似乎总是遇到一个错误,叫做:"被释放的指针没有分配",我不知道为什么。
struct包含动态数组,用于在读取文件后存储整数和字符串。该文件包含城市名称、高温和低温的列表。然后,在读取这些行之后,将它们存储到动态数组中,并在必要时增加动态数组(大小加倍)。
我是否为这个"增长"代码函数写了一些错误的东西?
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];
您使用了相同的temp数组。
然后你做:
arr1.hiTemp = tempInt;
arr1.loTemp = tempInt;
现在你的结构体有两个不同的指针指向同一个数组。
这意味着下次在该结构体上运行你的增长算法时,它将到达:
delete[] arr1.hiTemp;
delete[] arr1.loTemp;
,然后尝试删除相同的内存两次,这当然是非常糟糕的。
所以你需要解决这个问题,使用两个单独的new int
数组。
(或者只是将所有这些替换为std::vector
s,因为这些更容易管理。)
相关文章:
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 动态类的分段错误(家庭作业问题)
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 释放动态内存时C++错误
- 从 C 可执行文件加载动态库时收到错误C++"undefined symbol"
- 使用动态数组时C++逻辑错误
- 类动态数组错误
- 尝试从动态分配的二维数组 C++ 中读取值时出现分段错误,并在尝试删除它时给出 munmap_chunk():
- 寻找最小楼梯成本的动态规划问题的错误答案
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 动态 2D 阵列.为什么分段错误?
- 动态内存分配错误
- JNI 不满意链接错误: 动态链接库 (DLL) 初始化例程失败
- 导致堆缓冲区错误的动态分配数组的析构函数
- 如何修复访问动态数组中结构中的字符串变量时"segmentation fault (core dumped)"错误
- 删除动态数组会导致运行时错误
- 使用动态数组对算法编译器错误进行排序
- 我正在尝试使用回溯来解决 N queen 问题,但在编译时它会给出运行时错误(动态堆栈缓冲区溢出)
- 导入错误:动态模块未定义初始化函数
- 分割错误c++动态数组