首页 > 编程知识 正文

java深拷贝浅拷贝,深拷贝和浅拷贝

时间:2023-05-04 08:37:28 阅读:201921 作者:4827

 

当我申请了一个char型指针,想给另一个指针用等于号赋值时,这两个指针将指向同一块内存,如果我把第一个指针释放,那么另一个指针指向的数据也没有了。

 

for (int i = 0; i < 3; i++) {Node *n = new Node(i+'0',i);char *c = (char*)malloc(sizeof(Node));memcpy(c,n,sizeof(Node));array[i] = c;//array[i] = (char*)malloc(sizeof(Node));//memcpy(array[i], c, sizeof(Node));Node *temp = (Node*)((char*)array[i]);//std::cout << temp->x << " " << temp->y << std::endl;//std::cout<<n->x<<" "<<n->y<<std::endl;length++;free(c);} ?-572662307?-572662307?-572662307Hello World!

所以我们可以对另一个指针重新申请内存,然后用memcpy拷贝,那么第一个指针被释放,也完全没有影响。

array[i] = (char*)malloc(sizeof(Node));memcpy(array[i], c, sizeof(Node));

 

0 01 12 2Hello World!

 

​// 指针数组.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include <iostream>#include <cstring>const int max = 100;typedef struct Node {char x;int y;Node(int a, int b) :x(a),y(b){}}Node;void fun(char **array,int length){for (int i = 0; i < 3; i++){Node *n = new Node(i + '0', i);char *c = (char*)malloc(sizeof(Node));memcpy(c, n, sizeof(Node));array[i] = c;Node *temp = (Node*)((char*)array[i]);//std::cout << temp->x << " " << temp->y << std::endl;//std::cout<<n->x<<" "<<n->y<<std::endl;length++;//free(c);}}int main(){char **array;int length = 0;array = new char*[max];for (int i = 0; i < 3; i++) {Node *n = new Node(i+'0',i);char *c = (char*)malloc(sizeof(Node));memcpy(c,n,sizeof(Node));array[i] = (char*)malloc(sizeof(Node));memcpy(array[i], c, sizeof(Node));Node *temp = (Node*)((char*)array[i]);//std::cout << temp->x << " " << temp->y << std::endl;//std::cout<<n->x<<" "<<n->y<<std::endl;length++;free(c);}//fun(array,length);for (int i = 0; i < length; i++) {Node *temp = (Node*)((char*)array[i]);std::cout << temp->x << " " << temp->y << std::endl;} std::cout << "Hello World!n"; }// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单// 调试程序: F5 或调试 >“开始调试”菜单// 入门提示: // 1. 使用解决方案资源管理器窗口添加/管理文件// 2. 使用团队资源管理器窗口连接到源代码管理// 3. 使用输出窗口查看生成输出和其他消息// 4. 使用错误列表窗口查看错误// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件​

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。

  •  标签:  
  • java