4.1美团后台实习面试,没睡好效率极差。
其中有一个问题:free是如何释放内存的。
当时没答出来,网上找了几篇博文。
首先说一下C++和C的new/delete和malloc/free。
new做两件事:①分配内存 ②调用构造函数。delete是调用析构函数,然后释放内存。
malloc和free是分配和释放内存。malloc返回的是void指针,需要强制类型转换。
首先来看一段代码:
#include<iostream> #include<windows.h> #include<string> #include<cstdlib> using namespace std; #include <iostream> int main(int argc, char * argv[]) { char *p =new char; *p='a'; delete p; char *p1=new char; *p1='b'; *p='c'; std::cout<<*p1<<std::endl; delete p1; return 0; }
输出结果为:
这是一个帖子里讨论的内容:https://bbs.csdn.net/topics/300014026/
p和内存好像钥匙和房子的关系。free(p)只是把房子还了回去,该房子可以再次分给别人,你如果再次造访这个不属于你的房子,你就会看到不属于你的东西。
(未完,后续补充)