1. 程式人生 > >c++淺復制和深復制

c++淺復制和深復制

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++淺復制和深復制