gpt4 book ai didi

C++:尝试用 double 填充动态 vector 时出现错误

转载 作者:太空狗 更新时间:2023-10-29 19:48:53 33 4
gpt4 key购买 nike

我在类里面做的一个程序遇到了问题,连老师都找不到问题所在。我们正在做一个程序,要求用户输入 double 然后当他停止时,它扫描数组并将正负分开以将它们放在不同的数组中。

我们注意到,当我们使用 float 时,程序会处理更多数字,但如果我们输入太多,仍然会出错,而如果我们使用 double,它会在输入几个数字后出错。我的意思是错误,该程序运行良好,但是当它显示结果时,数组中有一些奇怪的数字。这是使用 double 的代码:

#include <iostream>
using namespace std;

void filling(double *, int &);
void sortPositiveNegative(double *, double *, double *, int, int &, int &);
void display(const double *, int);

int main () {
double * vecteur = new double;
double * positive = new double;
double * negative = new double;
int counter = 0, counterPos = 0, counterNeg = 0;

cout << "Filling of the real number vector " << endl;
filling(vecteur, counter);

cout << endl << "Display of the real number vector " << endl;
display(vecteur, counter);

cout << endl << "Sort of the positive and negative in the real number vector: " << endl;
sortPositiveNegative(vecteur, positive, negative, counter, counterPos, counterNeg);

cout << endl << "Display of the positive real number : " << endl;
display(positive, counterPos);

cout << endl << "Display of the negative real number : " << endl;
display(negative, counterNeg);

system("PAUSE");
return 0;
}

void filling (double *vecteur, int &counter)
{
bool validation;
char choice = 'Y';
do
{
do
{
validation = true;
cout << "Please enter the value of case " << counter+1 << ": ";
cin >> vecteur[counter];
if(cin.fail())
{
cerr << "The number entered is not valid." << endl;
cin.clear();
validation = false;
}
while(cin.get() != '\n'){}
}while(!validation);
counter++;
do
{
validation = true;
cout <<"Do you wish to continue? (Y/N): ";
cin >> choice;
if(toupper(choice) != 'Y' && toupper(choice) != 'N')
{
cerr << "We don't understand your choice, please try again." << endl;
cin.clear();
validation = false;
}
while(cin.get() != '\n'){}
}while(!validation);
}
while(toupper(choice)=='Y');
}

void sortPositiveNegative(double *vecteur, double *positive, double *negative, int counter, int &counterPos, int &counterNeg)
{
int i = 0;
for(i; i<counter;i++)
{
if(vecteur[i] >= 0)
positive[counterPos++] = vecteur[i];
else
negative[counterNeg++] = vecteur[i];
}
}

void display (const double *vecteur, int counter)
{
for(int i = 0; i<counter;i++)
cout << vecteur[i]<<endl;
cout << endl;
}

我的老师认为这可能是内存问题,但我们不知道为什么会这样。

提前致谢。

最佳答案

肯定是内存问题,我看不出如何使用float会修好它。例如,下面的代码行只分配了一个 double 而不是一个 double 组:

double * vecteur = new double;

然后,您使用这个 vecteur就好像它是一个包含 N 个元素的数组。这会触发未定义的行为。

要修复它,您必须根据需要分配一个包含尽可能多的值的数组。例如,假设您需要 10 个,那么您可以这样分配 10 个:

double * vecteur = new double[10];

但是,如果您事先不知道元素的数量,则每次要添加元素时都需要扩展数组。如果你用 C 写这个,我建议你使用 realloc() .但鉴于您使用 C++,请坚持使用 std::vector<double> ,它会自动管理内存。例如:

#include <vector>

int main()
{
std::vector<double> vecteur; // Use vector to store array of doubles.

// Add as many elements as you want.
// Vector will resize itself if/when needed.
vecteur.push_back(.1);
vecteur.push_back(.2);
vecteur.push_back(.3);
vecteur.push_back(.4);
vecteur.push_back(.5);
}

希望对您有所帮助。祝你好运!

关于C++:尝试用 double 填充动态 vector 时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16240379/

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