这段代码的目的是:建立一个集合,往集合中任意添加元素
//Set.h
#pragma once
#include <crtdbg.h>
//#include "stdafx.h"
#include <iostream>
using namespace std;
//template <class int> //声明一个模板,虚拟类型名为int
#ifdef _DEBUG //这个要加上,否则不会输出定义到那个文件中(及不包含存在内存泄露的该cpp文件的相关信息)
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
class Set
{
public:
Set ()
{
i=1;
a=new int [i];
if (a==NULL)
{
cout<<"a分配错误";
}
b=new int [i];
if (b==NULL)
{
cout<<"b分配错误";
}
}
void add(int num);
void cut(int num);
Set operator+(Set &a);
Set operator-(Set &a);
void relese(Set);
void show()
{
for(int n=0;n<i;n++)
cout<<this->a[n]<<endl;
cout<<"i="<<i<<endl;
}
private:
int *a;
int *b;
int i;
};
//Set.cpp
#include "Set.h"
//template <class int>
void Set::add(int num)
{
i++;
memcpy(b,a,(i-1)*sizeof(int));//a数组复制给b
delete[]a;//将a销毁
a=new int [i];//申请一个比b数组大一个单位的数组
if (a==NULL)//判断内存是否分配成功
{
cout<<"a分配错误";
}
else
{
a[i-1]=num;//将写进来的num赋给a[i-1]
memcpy(a,b,(i-1)*sizeof(int));//再将b中的复制给a中前[i-1]项
}
this->b=new int[i];
}
void Set::relese (Set S1)
{
delete []S1.a;
delete []S1.b;
cout<<"delete"<<endl;
}
//mian.cpp
#include "Set.h"
int main()
{
_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG));
Set S1;
S1.add(10);
S1.add(1);
S1.add(41);
S1.show();
S1.relese (S1);//销毁a、b申请的空间
_CrtDumpMemoryLeaks();
}
调试窗口中内存泄露提示:
Detected memory leaks!
Dumping objects ->
.\Set.cpp(8) : {135} normal block at 0x00565418, 16 bytes long.
Data: < ) > CD CD CD CD 0A 00 00 00 01 00 00 00 29 00 00 00
d:\编程\vc++2005\代码\experiment\experiment\Set.h(22) : {132} normal block at 0x005653D8, 4 bytes long.
Data: < > CD CD CD CD
各位大神帮忙看看