当我申请了一个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
?-572662307
Hello World!

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

array[i] = (char*)malloc(sizeof(Node));
memcpy(array[i], c, sizeof(Node));
0 0
1 1
2 2
Hello 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. js 浅拷贝直接赋值_JS中的赋值、浅拷贝与深拷贝

    作者:奚杰 拷贝是写代码中经常使用的方法.浅拷贝与深拷贝是指拷贝的两种情况.本文将深入探究JS的赋值.浅拷贝与深拷贝. 数据类型 在探究深拷贝与浅拷贝之前,我们先梳理一下JS的数据类型.在JavaSc ...

  2. python赋值浅拷贝和深拷贝的区别_python赋值、浅拷贝、深拷贝区别

    在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题.所以,在这里按个人的理解谈谈它们之间的区别. 一.赋值(assignment) 在<Py ...

  3. 赋值、浅拷贝与深拷贝

    一.数据类型 数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和引用数据类型. 基本数据类型:基本数据类型存储在栈内存中 引用数据 ...

  4. python类对象赋值_Python对象赋值、浅拷贝、深拷贝

    Python中,基本数据类型,理解为常见数据类型:布尔型.整型.浮点型.字符串.列表.元组.字典.集合,随语言不同而不同,但是根据在内存中存储方式的不同,区分开原子类型和容器类型. 对象赋值 对象的赋 ...

  5. python中赋值不正确的_python中关于赋值、浅拷贝与深拷贝的问题

    Python中关于对象复制有三种类型的使用方式,赋值.浅拷贝与深拷贝.他们既有区别又有联系,刚好最近碰到这一类的问题,研究下. 一.赋值 在python中,对象的赋值就是简单的对象引用,这点和C++不 ...

  6. Python——赋值、浅拷贝、深拷贝

    和很多语言一样,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式. 在学习过程中,一开始对浅拷贝理解很模糊.不过经过一系列的实验后,我发现对这三者的概念有了进一步的了 ...

  7. int** 赋值_Python的赋值、浅拷贝、深拷贝之间的区别

    这里用三张图来说清Python的赋值.浅拷贝.深拷贝之间的区别. 补充说明: 1.首先要理解 不可变数据.可变数据类型: 2.对于其他语言(如JAVA)的浅拷贝.深拷贝逻辑相同: 3.下图所描述的数据 ...

  8. Python 中的对象赋值、浅拷贝和深拷贝

    一.对象赋值 首先,创建了一个名为 will 的变量,这个变量指向一个 list 对象,从第一张图中可以看到所有对象的地址(每次运行,结果可能不同) 然后,通过 will 变量对 wilber 变量进 ...

  9. 详细解析赋值、浅拷贝和深拷贝的区别

    详细解析赋值.浅拷贝和深拷贝的区别 一.赋值(Copy) 赋值是将某一数值或对象赋给某个变量的过程,分为下面 2 部分 基本数据类型:赋值,赋值之后两个变量互不影响 引用数据类型:赋址,两个变量具有相 ...

最新文章

  1. 判断手机是否弹出键盘,改变了手机页面高度,对应inputStatus的状态改变相关控件的大小和位置
  2. 乏善可陈的Neuralink
  3. kali linux下安装TOR
  4. Oracle查询转换之连接谓词推入
  5. Python API快餐教程(1) - 字符串查找API
  6. 带有示例的Python列表reverse()方法
  7. python htmltestrunner报告_为什么python+htmltestrunner生成的测试报告有问题?
  8. 360智能工程中心期待你的加入
  9. 常问 3: 谈谈MySQL共享锁与排他锁
  10. flex 布局下关于容器内成员 flex属性的理解
  11. python pow_Python pow()
  12. 问题七十:计算机图形中的采样(Sampling)
  13. 计算机关闭系统剪切板上的内容,如何在Win10中打开/关闭和清除剪贴板历史记录...
  14. 一个例子学会自相关互相关的计算
  15. hdmi 屏幕旋转 树莓派_树莓派7寸HDMI显示屏使用教程
  16. 1.定义一个基类 Base,有两个公有成员函数fn1( ),fn2 ( )。 私有派生出Derived类,如何通过Derived 类的对象调用基类的函数fnl() ?
  17. 如何解决苹果Mac电脑安装PS失败并出现错误代码131 182出现“错误代码107”解决办法
  18. 如何配置一台电脑。(一次解决电脑基础知识和如何选择合适电脑)
  19. (一)TileMap使用
  20. 重庆封闭式计算机学校有哪些,重庆市十佳高三学校排名榜

热门文章

  1. nil/Nil/NULL/NSNull的来历
  2. 【2022】全网最详细纯手工写YOLOv3之数据预处理,你必须看得懂(二)
  3. oracle数据库物化视图的作用,Oracle物化视图的用法与总结
  4. 【转】Qt 多线程串口通信问题?
  5. 通用漏洞评估方法CVSS 3.0 计算公式及说明
  6. 分析iPhone的SpringBoard重启实现
  7. 内网学习——0x04 域内信息收集
  8. NBA状元秀总冠军列表(from 1990)
  9. 解读90后关键词 新生的红利市场在哪?
  10. 如何找到销量下滑的原因-丰田5Why分析法