最近遇到的问题,具体如下:
#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; }
如果改成这样,执行如下:
为什么内存又不增长
时间: 2024-10-08 01:46:34