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

 继续上次那个诡异的问题,说不定是new,delete的问题,换成malloc,free试试: 
#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**)malloc(sizeof(T*)*N);
		for (i = 0; i < N; i++)
			p[i]=(T*)malloc(sizeof(T)*M);
		break;

	case true:
		for (i = 0; i < N; i++)
		{
			free(p[i]);
			p[i] = nullptr;
		}
		free(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;
}
执行结果如下:
动态二维数组一个很奇怪的问题,内存泄露还是???(二)_第1张图片
动态二维数组一个很奇怪的问题,内存泄露还是???(二)_第2张图片
额,malloc,free居然也有这个问题,昨天公司的电脑win7感觉不怎么严重,今天自己的电脑win10居然这么多,????

同样换成一维试试:
#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**)malloc(sizeof(T*)*N);
	//	for (i = 0; i < N; i++)
	//		p[i]=(T*)malloc(sizeof(T)*M);
		break;

	case true:
		//for (i = 0; i < N; i++)
		//{
		//	free(p[i]);
		//	p[i] = nullptr;
		//}
		free(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;
}
执行结果如下:
动态二维数组一个很奇怪的问题,内存泄露还是???(二)_第3张图片
动态二维数组一个很奇怪的问题,内存泄露还是???(二)_第4张图片
额,一维还是没问题咯,???,是不是我上面的代码写的有问题,神奇



你可能感兴趣的:(C++,二维数组,内存泄露,C++11)