奇怪的 内存 释放问题。delete 之后,内存无法释放

文章正文
发布时间:2025-10-07 02:24

这个不存在内存泄漏问题啊,简单来说就是作用域问题,有临时变量没有释放而已,贴两段代码自己体会一下吧,注意注释掉的花括号 #include <iostream> #include <map> using namespace std; int main(int argc,char* argv[]) { int i = 0; std::cout<<"waitting for input, you can check current memory"<<std::endl; std::cin>>i; // { char** ptr = new char *[1000000]; std::map<int,char *> tMap; for (unsigned long i = 0; i < 1000000; i++) { ptr[i] = new char[3000]; { tMap.insert(make_pair(i,ptr[i])); } } std::cout<<"waitting for input, you can check current memory"<<std::endl; std::cin>>i; for (unsigned long i = 0; i < 1000000; i++) { delete[]ptr[i]; } delete[]ptr; // } std::cout<<"waitting for input, you can check current memory"<<std::endl; std::cin>>i; return 0; } #include <iostream> #include <map> using namespace std; int main(int argc,char* argv[]) { int i = 0; std::cout<<"waitting for input, you can check current memory"<<std::endl; std::cin>>i; { char** ptr = new char *[1000000]; std::map<int,char *> tMap; for (unsigned long i = 0; i < 1000000; i++) { ptr[i] = new char[3000]; // { tMap.insert(make_pair(i,ptr[i])); // } } std::cout<<"waitting for input, you can check current memory"<<std::endl; std::cin>>i; for (unsigned long i = 0; i < 1000000; i++) { delete[]ptr[i]; } delete[]ptr; } std::cout<<"waitting for input, you can check current memory"<<std::endl; std::cin>>i; return 0; } 一般在函数中使用按楼主原来写法没什么问题,如果要严格控制内存,参考上面的代码