是一个自己实现动态数组类的小程序。调试编译通过了~,运行出现此错误,新手不知该怎么办。
源程序:
头文件:
#ifndef MYARRAY
#define MYARRAY
class CMyArray
{
public:
CMyArray(); //默认构造函数:默认分配10个long类型空间,增量为5
CMyArray(int nCount,int nIncrem); //构造函数:分配nCount个long类型空间,增量为nIncrem
~CMyArray(); //构造函数:释放所有空间,防止内存泄露
private:
void init(); // initilize the array
int InvalidateIndex(int nIndex); // judge the validate of an index
protected:
int m_nDataCount; //数据总数量
int m_nSize; //空间大小
int m_nIncrem; //若空间不足后,每次分配增量值
long *m_nData; // 所分配内存的头指针
void grow(int m); //分配增量
public:
int AddData (long nData); //在尾部添加一个数据nData,返回其索引值
bool DeleteData(int nIndex); //删除指定索引nIndex的数据(其后数据会前移,不允许留有空位)
int GetDataCount(); //获取数据总数量
bool GetData(int nIndex); //获取指定索引nIndex的数据
void Clean(); //清空数据nData,并释放空间
void Display();
};
#endif
方法文件:
#include "myarray.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
CMyArray::CMyArray() //默认分配10个long类型空间,增量为5
{
long *m_nData=new long[10];
m_nSize = 10;
}
CMyArray:: CMyArray(int nCount,int nIncrem) //构造函数:分配nCount个long类型空间,增量为nIncrem
{
long *m_nData=new long[nCount];
m_nSize = nCount;
m_nIncrem = nIncrem;
}
CMyArray:: ~CMyArray() //析构函数:释放所有空间,防止内存泄露
{
Clean();
}
void CMyArray::init()
{
m_nData = NULL;
m_nSize = 0;
m_nDataCount = 0;
}
void CMyArray::Clean () //清空数据nData,并释放空间
{
delete [ ] m_nData;
}
void CMyArray::grow(int m)
{
if(m_nData != NULL)
{
long * m_nDataN = new long[m_nSize +m ];
memcpy(m_nDataN, m_nData, m_nSize);
m_nSize +=m;
delete[] m_nData;
m_nData = m_nDataN;
}
}
int CMyArray::InvalidateIndex(int nIndex)
{
if(nIndex < 0 || nIndex > GetDataCount())
{
return true;
}
else
{
return false;
}
}
int CMyArray::GetDataCount() //获取数据总数量
{
return m_nDataCount;
}
bool CMyArray::GetData(int nIndex) //获取指定索引nIndex的数据
{
if( InvalidateIndex(nIndex) )
{
cout<<"Index is invalide in GetData()!"<<endl;
return false;
}
else
{
return m_nData[nIndex];
}
}
bool CMyArray::DeleteData(int nIndex) //删除指定索引nIndex的数据(其后数据会前移,不允许留有空位)
{
if( InvalidateIndex(nIndex) )
{
cout<<"Index is invalide in RemoveAt()!"<<endl;
return false;
}
else
{
for( int i=nIndex; i<m_nDataCount-1; i++ )
{
m_nData[i] = m_nData[i+1];
}
m_nDataCount--;
return true;
}
}
int CMyArray::AddData(long nData) //在尾部添加一个数据nData,返回其索引值
{
if( m_nDataCount < m_nSize )
{
m_nData[m_nDataCount] = nData;
m_nDataCount++;
}
else
{
//assert( m_nDataCount == m_nSize );
if( m_nSize == 0 )
{
m_nSize = 1;
}
else
{
m_nSize *= 2;
}
long *pTemp=NULL;
pTemp = new long [m_nSize];
if( pTemp == NULL )
{
cout<< "Can not alloc memory in PushBack()!" << endl;
return 0;
}
for( int i=0; i<m_nDataCount; i++ )
{
pTemp[i] = m_nData[i];
}
pTemp[m_nDataCount] = nData;
delete[] m_nData;
m_nData = pTemp;
m_nDataCount++;
}
return true;
}
void CMyArray::Display()
{
cout<<"m_nSize= "<< m_nSize <<" DataCount= "<<GetDataCount()<<":";
for(int i=0; i<GetDataCount(); i++)
{
cout<<" "<<GetData(i);
}
cout<<endl;
}
测试文件 主程序:
#include "myarray.h"
#include <iostream.h>
void main()
{
CMyArray a;
a.AddData(10);
a.Display();
}
谢谢各位了