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)只是把房子還了回去,該房子可以再次分給別人,你如果再次造訪這個不屬於你的房子,你就會看到不屬於你的東西。
(未完,后續補充)