首页
社区
课程
招聘
大神好,我是刚学C++语言,在编程时出了错误,希望大神帮忙解释下
发表于: 2014-5-14 23:05 8570

大神好,我是刚学C++语言,在编程时出了错误,希望大神帮忙解释下

2014-5-14 23:05
8570
题目是:编程序创建一个类模板,可以对不同的数据类型的数组分别进行初始化、添加数据、求和、求平均值、显示数组等功能。

这是我的源代码:
#include<iostream>
using namespace std;
template <typename T>
class Array
{
public:
  T *a = new T[size];
  T b = 0;
  Array(int s)
  {if (s > 1)
    size = s;
  else size = 1;
  }
  void Set()
  {
    for (int i = 0; i < size; i++)
    {
      cin >> a[i];
    }
  }
  void Plus()
  {
    for (int i = 0; i<size; i++)
    {
      b = b + *(a + i);
    }
    cout << b << endl;
  }
  void Average()
  {
    cout <<( b / size )<< endl;
  }
protected:
  int size;
};
int main()
{
  cout << "请输入整型数列" << endl;
  Array<int>IntArray(3);
  IntArray.Set();
  IntArray.Plus();
  IntArray.Average();
  cout << "请输入双精度数列" << endl;
  Array<double>DoubleArray(3);
  DoubleArray.Set();
  DoubleArray.Plus();
  DoubleArray.Average();
}
编程环境是VS2013,windows8,在调试程序时,有时可以顺利进行,但是时不时在第一行输入三个整数数列时,空格结束后就弹出一个错误。错误是0x774CF996 (ntdll.dll) (实验4.2.exe 中)处有未经处理的异常:  0xC0000374: 堆已损坏。 (参数:  0x774ED338)。请大神帮忙看下小弟的源代码中是否有哪里疏漏不够严谨,导致程序会出错。这个错误很不稳定,有时没事,有时就出错。




[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 60
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
用scanf输入好点,cin每个数据一个回车,不要空格,还有你new的东西记得要delete
2014-5-14 23:16
0
雪    币: 200
活跃值: (38)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
T *a = NULL;

Array(int s)
{
  if (s > 1)
    size = s;
  else size = 1;
  a = new T[size];
}

~Array()
{
  delete [] a;
}
2014-5-14 23:47
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
delete这个问题我也有想过,不过好像delete了也还是会有问题。还有一个问题就是不delete有关系吗?
2014-5-15 00:14
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=ganboing;1284499]T *a = NULL;

Array(int s)
{
  if (s > 1)
    size = s;
  else size = 1;
  a = new T[size];
}

~Array()
{
  delete [] a;
}[/QUOTE]

好像如你那样编了之后的确不再有错误了,能不能跟我解释下呢?是哪里出了问题,谢谢了~
2014-5-15 00:17
0
雪    币: 38
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
你的代码中着两行代码有问题
    T *a = new T[size];
    T b = 0;

类的成员变量初始化应该在构造函数中完成。显然 T *a  申请一段空间显然有问题,同理 T b = 0 赋值也不符合标准。
2014-5-15 00:45
0
雪    币: 341
活跃值: (138)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
大晚上的都在抢答。。。
2014-5-15 00:46
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=wenxiaohua;1284506]你的代码中着两行代码有问题
    T *a = new T[size];
    T b = 0;

类的成员变量初始化应该在构造函数中完成。显然 T *a  申请一段空间显然有问题,同理 T b = 0 赋值也不符合标准。[/QUOTE]

原来如此,谢谢大神解答了~
2014-5-15 13:27
0
游客
登录 | 注册 方可回帖
返回
//