c++淺復制和深復制
阿新 • • 發佈:2018-02-23
char windows.h system body mes stream 深復制 內存共享 name
#include <iostream> #include <string> #include <windows.h> using namespace std; //定義結構體類型 typedef struct person { char name[10];//12 char *a_name;//4 } p; //創建結構體實例 p * setPersons() { p *c = (p*)malloc(sizeof(p)); cout << "name:" << endl; cin >> c->name; cout<< "a_name:" << endl; char *nmm = (char *)malloc(10); cin >> nmm; c->a_name = nmm; return c; } //釋放內存 void freeZoom(p* a) { //釋放內部指針 if (a->a_name != NULL) { free(a->a_name); a->a_name = NULL; } if (a != NULL) {free(a); a = NULL;//這句是廢話 } } void main() { //結構體內部有指針的話,要重新操作內部指針的內容,不然復制的指針會內存共享,多次釋放會發生錯誤。 //cout << sizeof(p) << endl;//16 p* p1 = setPersons(); p* p2 = (p*)malloc(sizeof(p));//分配內存 //memcpy(p2, p1, sizeof(p1));//淺復制 *p2 = *p1;//賦值操作淺復制 cout << "a_name:" << endl; char *nmm = (char *)malloc(10);//分配內存深復制 cin >> nmm; p2->a_name = nmm; //打印 cout << p1->name << endl; cout << p1->a_name << endl; cout << p2->name << endl; cout << p2->a_name << endl; //釋放內存 freeZoom(p1); p1 = NULL; freeZoom(p2); p2 = NULL; system("pause"); }
c++淺復制和深復制