gpt4 book ai didi

c++ - 动态数组双重释放或损坏

转载 作者:太空宇宙 更新时间:2023-11-04 15:33:28 24 4
gpt4 key购买 nike

我今天的问题是动态数组。每次我输入超过 2 个测试分数时,在我输入第 3 个最大测试分数后,我会收到一个错误,上面写着“* `./a.out' 错误:双重释放或损坏(输出):0x09c2e028 * 已中止(核心已转储)”,我是不是对数组做错了什么?还是我遗漏了什么?

该程序应该采用无限数量的测试分数及其各自的最大可能分数(即测试分数 = 76 可能的最大测试分数 = 100),并将这些数字转化为 GPA。我只包括了我用来创建 GPA 的类(class),因为其余代码尚未完成,因为我无法通过这一部分。

我必须使用动态数组,因为它用于学校作业。

感谢阅读我希望有人能帮助我!

#include <iostream>
#include <string>
#include <cmath>
#include <math.h>
#include <iomanip>
#include <cassert>
using namespace std;
void programGreeting();

class testScores{
public:
float testAverage(){
int i = 0;
float gpa2 = 0;
int loopCountVar = 0;
int size = 1;
int size2 = 1;
float *testScore = new float[size];
float *maxScore = new float[size];
while(testScore[i] != -1){
i++;
loopCountVar++;
cout << "Enter test score #" << loopCountVar << endl;
cin >> testScore[i];
if(testScore[i] == -1){
size = i;
}
assert(testScore[i] > -2);
cout << "Enter max test score #" << loopCountVar << endl;
cin >> maxScore[i];
if(maxScore[i] == -1){
size2 = i;
}
assert(maxScore[i] > -2);
}
float *gpa = new float[size];
for(i = 1; i < size; i++){
gpa[i] = testScore[i] / maxScore[i];
cout << gpa[i] << " " << endl;
}
for(i = 1; i < size; i++){
gpa2 += gpa[i];
}
for (i = 1; i < size; i++){
cout << endl << testScore[i] << " " << endl;
}
for (i = 1; i < size2; i++){
cout << endl << maxScore[i] << " ";
}
cout << endl << gpa2 << endl;
cin >> size;
delete testScore;
delete [] maxScore;
delete gpa;
return 0;
}
};

最佳答案

您所有的分配都是new ...[],所以所有的删除都必须是delete [] ...

delete [] testScore;
delete [] maxScore;
delete [] gpa;

此外,您的代码只为 testscore 和 maxscore 分配一个元素,但您一直将元素写入数组,直到用户输入 -1。这意味着您很可能会覆盖缓冲区的末尾。

您应该摆脱原始指针并使用像 std::vector 这样的 STL 容器。有了这些,您可以轻松地将元素添加到末尾,而无需重新分配自己。

关于c++ - 动态数组双重释放或损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41932234/

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