码迷,mamicode.com
首页 > 编程语言 > 详细

动态二维数组一个很奇怪的问题,内存泄露还是???

时间:2016-05-07 09:12:51      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

最近遇到的问题,具体如下:

 #include <iostream>
using namespace std;

typedef void(*P[10])(bool& flag);
#define N 10000
#define M 10000

template<class T>
void fun(bool& flag)
{
int i;
static T** p=nullptr;

switch (flag)
{
case false:
p = (T**)new T*[N];
for (i = 0; i < N; i++)
p[i] = (T*)new T[M];
break;

case true:
for (i = 0; i < N; i++)
{
delete[] p[i];
p[i] = nullptr;
}
delete[] p;
p = nullptr;
break;
}
flag ^= true;
}

int main()
{
P pt;
pt[0] = fun<int>;
pt[1] = fun<char>;
pt[2] = fun<__int64>;
pt[3] = fun<float>;
pt[4] = fun<double>;

int i=0,j;

system("pause");
while(i < 5)
{
bool flag = false;
for (j = 0; j < 6; j++)
pt[i](flag);
i++;
}
system("pause");
return 0;
}
执行情况如下:
技术分享
技术分享
为什么内存增长了这么多 。


#include <iostream>
using namespace std;

typedef void(*P[10])(bool& flag);
#define N 100000000
//#define M 10000

template<class T>
void fun(bool& flag)
{
	int i;
	static T** p=nullptr;

	switch (flag)
	{
	case false:
		p = (T**)new T*[N];
//		for (i = 0; i < N; i++)
	//		p[i] = (T*)new T[M];
		break;

	case true:
//		for (i = 0; i < N; i++)
//		{
//			delete[] p[i];
//			p[i] = nullptr;
//		}
		delete[] p;
		p = nullptr;
		break;
	}
	flag ^= true;
}

int main()
{
	P pt;
	pt[0] = fun<int>;
	pt[1] = fun<char>;
	pt[2] = fun<__int64>;
	pt[3] = fun<float>;
	pt[4] = fun<double>;

	int i=0,j;

	system("pause");
	while(i < 5)
	{
		bool flag = false;
		for (j = 0; j < 6; j++)
			pt[i](flag);
		i++;
	}
	system("pause");
	return 0;
}

如果改成这样,执行如下:
技术分享
技术分享

为什么内存又不增长 


动态二维数组一个很奇怪的问题,内存泄露还是???

标签:

原文地址:http://blog.csdn.net/a809146548/article/details/51332136

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!