有时在动态分配内存时程序崩溃

时间:2015-06-11 14:35:43

标签: c++

我正在学习指针和动态分配内存。所以我的问题更多的是技术问题。无论什么时候我似乎都使用了新的'为我正在做的事情分配内存的关键字,我的程序有时会崩溃。有时不是。

#include <iostream>
#include <iomanip>
#include <cstdlib>  //I added this header file to get the NULL, this is not originally from the book

using namespace std;

int main(){
   double *salesArry = NULL;
   double total = 0.0, average;
   int numDays, count;

   cout << "How many days of sales figured do you wish to process ";
   cin >> numDays;

   salesArry = new double[numDays];

   cout << "Enter the sales figures below.\n";
   for(count = 0; count < numDays; count++){
       cout << "Day " << (count + 1) << ": ";
       cin >> salesArry[count];          
   }

   for(count = 0; count < numDays; count++){
       total += salesArry[count];
   }

   average = total/numDays;

   cout << fixed << showpoint << setprecision(2);
   cout << "\n\nTotal Sales: $" << total << endl;
   cout << "\n\nAverage Sales: $" << average << endl;

   delete [] salesArry;
   salesArry = NULL;

   return 0;
}

完全免责声明:我是学生,这不是作业。我发了一本书的例子。我一字一句地复制了它,但我的程序仍然崩溃了。我发布代码的唯一原因是有人会问我们能否看到代码&#34;。现在我正在研究的项目是做同样的事情(崩溃)所以我怀疑这本书和我都错了所以这就是为什么我猜测它是一个技术问题。我使用的IDE是Dev C ++及其默认编译器。

这是来自Tony Gaddis的书&#34;开始用C ++&#34;第9章,第524页

2 个答案:

答案 0 :(得分:8)

new double(numDays);

糟糕!当你转录这本书时,你做了一个印刷错误。 (我可以确认你说你正在使用的第8版没有犯这个错误(图9-14,等等。)。

要动态分配数组,必须使用方括号,否则您只需使用值double初始化一个动态分配的numDays

new double[numDays];

答案 1 :(得分:5)

salesArry = new double(numDays);

该行不会创建numDays double个数组,它会分配一个double并将其初始化为numDays

要创建数组,您可以使用:

salesArry = new double[numDays];

但是,在C ++中,最好使用std::vector而不是手动动态分配数组:

std::vector<double> salesArray (numDays);