精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C語言結構體成員賦值的深拷貝和淺拷貝

開發 后端
最近在做通信協議的解析處理、傳遞分析等問題,總是遇到通信幀中的結構體拷貝等問題,遇到了一些坑,也是比較基礎但是易錯的C語言知識,一起來探究一下結構體的深拷貝和淺拷貝。

淺拷貝

C語言中的淺拷貝是指在拷貝過程中,對于指針型成員變量只拷貝指針本身,而不拷貝指針所指向的目標,它按字節復制的。我們分幾種情況舉例子來看一下。

結構體中不存在指針成員變量時

代碼如下:

//在win10_64位+vs2017
//來源:技術讓夢想更偉大
//作者:李肖遙
#include <stdio.h>
typedef struct {
char name[64];
int age;
}Member;
int main(){
Member stu1 = { "LiMing", 18 };
Member stu2;
stu2 = stu1;
printf("%s,%d\n", stu2.name, stu2.age);
system("pause");
return 0;
}

運行如下:

結構體中存在指針成員變量時

代碼如下:

//在win10_64位+vs2017
//來源:技術讓夢想更偉大
//作者:李肖遙
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char *name;
int age;
}Member;
int main() {
Member Member1, Member2;
Member1.name = malloc(sizeof(char) * 64);
if (NULL == Member1.name)
{
printf("malloc failed\n");
}
memset(Member1.name, 0, 64);
//strcpy(Member1.name, "LiMing");
snprintf(Member1.name, 64, "LiMing");
Member1.age = 18;
Member2 = Member1;/*拷貝*/
snprintf(Member2.name, 64, "LiXiaoYao");
Member2.age = 29;
printf("%s, %d\n", Member1.name, Member1.age);
if (NULL != Member1.name) {
free(Member1.name);
Member1.name = NULL;
}
system("pause");
return 0;
}

運行如下:

從中我們看到,改變Member2的值,Member1的值也改變了,這說明一片空間被兩個不同的子對象共享了,改變一個對象的值另外一個也會隨之改變。

我們改變Member2寫法,申請內存的代碼如下:

//在win10_64位+vs2017
//來源:技術讓夢想更偉大
//作者:李肖遙
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char *name;
int age;
}Member;
int main() {
Member Member1;
Member1.name = malloc(sizeof(char) * 64);
if (NULL == Member1.name)
{
printf("malloc failed\n");
}
memset(Member1.name, 0, 64);
//strcpy(Member1.name, "LiMing");
snprintf(Member1.name, 64, "LiMing");
Member1.age = 18;
Member Member2;
Member2.name = malloc(sizeof(char) * 64);
if (NULL == Member2.name)
{
printf("malloc failed\n");
}
memset(Member2.name, 0, 64);
//strcpy(Member2.name, "LiMing");
snprintf(Member2.name, 64, "LiXiaoYao");
Member2.age = 29;
Member1 = Member2;
printf("%s, %d\n", Member2.name, Member2.age
if (NULL != Member1.name) {
free(Member1.name);
Member1.name = NULL;
}
if (NULL != Member2.name) {
free(Member2.name);
Member2.name = NULL;
}
system("pause");
return 0;
}

運行如下:

從中我們看到,當數據成員中有指針時,兩個類中的兩個指針將指向同一個地址,當對象快結束時,會調用兩次free函數,此時Member2已經是野指針(圖中有X的錯誤標志),這個野指針指向的內存空間已經被釋放掉,再次釋放會報異常錯誤,要解決這個問題就要涉及到深拷貝了。

深拷貝

深拷貝除了拷貝其成員本身的值之外,還拷貝成員指向的動態內存區域內容,深拷貝會在堆內存中另外申請空間來儲存數據。

解決的思路是在釋放掉被賦值指針變量的舊指向內存時,重新對其開辟新內存,這種情況下兩個結構體中指針地址不同,但是指向的內容是一致的。代碼如下:

//在win10_64位+vs2017
//來源:技術讓夢想更偉大
//作者:李肖遙
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char *name;
int age;
}Member;
int main() {
Member Member1;
Member1.name = malloc(sizeof(char) * 64);
if (NULL == Member1.name)
{
printf("malloc failed\n");
}
memset(Member1.name, 0, 64);
//strcpy(Member1.name, "LiMing");
snprintf(Member1.name, 64, "LiMing");
Member1.age = 18;
Member Member2;
Member2.name = malloc(sizeof(char) * 64);
if (NULL == Member2.name)
{
printf("malloc failed\n");
}
memset(Member2.name, 0, 64);
//strcpy(Member2.name, "LiMing");
snprintf(Member2.name, 64, "LiXiaoYao");
Member2.age = 29;
if (Member1.name != NULL) {
free(Member1.name);
Member1.name = NULL;
}
Member1.name = malloc(strlen(Member2.name) + 1);
strcpy(Member1.name, Member2.name);
printf("%s, %d\n", Member1.name, Member1.age);
if (NULL != Member1.name) {
free(Member1.name);
Member1.name = NULL;
}
if (NULL != Member2.name) {
free(Member2.name);
Member2.name = NULL;
}
system("pause");
return 0;
}

運行如下:

結論

使用C語言來說,深拷貝淺拷貝的概念我們不需要深究,在進行結構體拷貝的時候,結構體成員是非指針的話,那么直接賦值是沒有任何問題的,建議使用這種方式,避免淺拷貝這類不易發現的錯誤產生。

如果成員有指針類型,我們就需要重寫拷貝函數,自己定義拷貝行為了,這一點我們需要尤為注意。

責任編輯:龐桂玉 來源: C語言與C++編程
相關推薦

2017-08-16 13:30:05

Java深拷貝淺拷貝

2021-07-16 12:33:24

Javascript深拷貝淺拷貝

2021-10-18 09:01:01

前端賦值淺拷貝

2022-07-26 08:07:03

Python淺拷貝深拷貝

2021-09-27 11:07:11

深拷貝淺拷貝內存

2018-09-26 14:37:17

JavaScript前端編程語言

2021-06-28 07:12:28

賦值淺拷貝深拷貝

2020-08-03 08:24:26

原型模式拷貝

2009-05-19 17:28:44

深拷貝淺拷貝clone()

2021-01-08 06:15:09

深拷貝淺拷貝寫時拷貝

2020-10-12 08:35:22

JavaScript

2023-05-17 08:42:46

深拷貝Golang

2018-05-10 14:20:18

前端JavaScript深拷貝

2024-02-05 22:56:16

C++拷貝開發

2024-03-15 15:03:23

2024-04-17 09:01:08

Python深拷貝淺拷貝

2023-05-17 07:36:00

淺拷貝深拷貝對象

2020-06-23 08:41:47

JavaScript開發技術

2023-09-22 12:21:33

Python深拷貝淺拷貝

2022-11-07 11:37:27

深拷貝淺拷貝底層
點贊
收藏

51CTO技術棧公眾號

亚洲天堂免费| 成人性片免费| www激情久久| 国产专区欧美专区| 久久精品久久精品久久| 伊人春色精品| 91精品欧美一区二区三区综合在 | 日本韩国一区二区| japanese在线视频| 日本天堂影院在线视频| 精品在线播放免费| 7m第一福利500精品视频| 极品久久久久久久| 日韩精品免费一区二区三区竹菊| 欧美精品在线观看一区二区| 国产一区二区网| 免费av不卡| 99这里都是精品| 91九色综合久久| 国产精品久久久久久久久夜色| 欧美在线播放| 日韩在线国产精品| 亚洲av无码一区二区二三区| 国产精品一区三区在线观看| 色视频一区二区| 九色自拍视频在线观看| 国产激情小视频在线| 国产区在线观看成人精品 | 国产亚洲电影| 精品视频久久久久久| 国产吃瓜黑料一区二区| 一区二区三区无毛| 欧美天堂一区二区三区| 成人免费在线小视频| 欧洲中文在线| 亚洲精品中文字幕在线观看| 在线观看日本一区| 在线视频91p| 国产午夜精品美女毛片视频| 久久一区二区精品| 婷婷视频在线观看| 不卡免费追剧大全电视剧网站| 亚洲最大的网站| 亚洲视频中文字幕在线观看| 日韩精品欧美精品| 国产福利视频一区| 久久精品视频1| 羞羞视频在线观看欧美| 45www国产精品网站| 九九热国产在线| 国产精品v一区二区三区| 蜜臀久久99精品久久久无需会员| 国产wwwwxxxx| 亚洲色图二区| 九色成人免费视频| 亚洲国产综合久久| 99视频一区| 日本韩国欧美精品大片卡二| 中文字幕一区二区人妻视频| 三级不卡在线观看| 国产精品吴梦梦| 国产一区二区麻豆| 国产精品一卡二| 国产精品久久久久久久免费大片| 精品女同一区二区三区| 福利一区二区在线观看| 精品国产乱码一区二区三区四区 | 色噜噜亚洲精品中文字幕| 性色国产成人久久久精品| 99久久精品国产亚洲精品 | 亚洲欧美日韩国产yyy| 欧美人xxx| 一区2区3区在线看| 国产午夜伦鲁鲁| 日本一道高清亚洲日美韩| 欧美乱妇23p| 免费黄视频在线观看| 风间由美一区二区av101| 日韩精品在线免费观看| 久久久久99精品成人| 欧美激情91| 欧美一区二区三区…… | 久久电影国产免费久久电影| 91在线观看免费高清完整版在线观看| 超碰福利在线观看| 久久青草欧美一区二区三区| 伊人久久青草| 国产h片在线观看| 欧美亚男人的天堂| 91成人在线观看喷潮蘑菇| 亚洲色图美女| 欧美成年人视频网站| 国产婷婷色一区二区在线观看| 免费在线看成人av| 国产精品v欧美精品v日韩精品| 欧美日韩国产中文字幕在线| 亚洲素人一区二区| 免费毛片小视频| crdy在线观看欧美| 亚洲男人的天堂网站| av最新在线观看| 国产亚洲精品久久久久婷婷瑜伽| 成人高清视频观看www| 天堂av中文字幕| 亚洲天堂av一区| 精品久久久久久久无码| 成人春色在线观看免费网站| 伊人男人综合视频网| 日韩精品一区二区三| 老司机午夜精品99久久| 乱色588欧美| 欧美xxxx少妇| 91精品国产综合久久久久久漫画 | 亚洲视频小说图片| 久久久精品在线视频| 综合成人在线| 久久久精品影院| 中文字幕你懂的| 91视频免费播放| www成人免费| 小黄鸭精品aⅴ导航网站入口| 精品国产一区久久| 玖玖爱这里只有精品| 日产国产欧美视频一区精品| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 日韩av在线电影| 国产成人精品www牛牛影视| 日韩亚洲欧美精品| 三级在线看中文字幕完整版| 日韩精品一区二区三区在线 | 黄色小视频在线观看| 亚洲成精国产精品女| 欧美一级片在线免费观看| 午夜av一区| 国产拍精品一二三| 日本中文字幕伦在线观看| 日本韩国欧美国产| 实拍女处破www免费看| 亚洲第一伊人| 国产一区二区三区四区五区加勒比 | 欧美美女在线直播| 久久人人爽人人| 秋霞视频一区二区| 午夜精品123| 国产成人av无码精品| 国产欧美日本| 欧美日韩国产三区| 日韩影片中文字幕| 国产午夜精品一区二区三区 | 亚洲毛茸茸少妇高潮呻吟| 日韩少妇高潮抽搐| 91在线看国产| 激情网站五月天| 国产日产一区| 国产日韩在线一区| av在线看片| 精品国产一二三区| 羞羞影院体验区| 国产目拍亚洲精品99久久精品| 国产精品久久久久9999小说| 欧美日韩一二| 成人免费xxxxx在线观看| 国产黄a三级三级三级av在线看| 91.com在线观看| 久久久全国免费视频| 成人小视频免费观看| 5月婷婷6月丁香| 精品国产乱码久久久久久果冻传媒| 国产精品激情av在线播放| 日韩三级影院| 日韩美女一区二区三区| 91蜜桃视频在线观看| 国产精品中文有码| 亚洲伊人婷婷| 高潮久久久久久久久久久久久久| 欧美一级片一区| 日本综合在线| 亚洲国产精彩中文乱码av| 欧美超碰在线观看| 亚洲色图视频网| 青青草视频网站| 蜜桃av一区二区| 国产成人在线小视频| 久久99国内| 999视频在线免费观看| 黄视频免费在线看| 色先锋资源久久综合5566| 亚洲精品国产一区二| 在线日韩一区二区| 久久久久无码国产精品不卡| 国产亚洲视频系列| 永久av免费在线观看| 亚洲欧美网站| 黄色特一级视频| 国精一区二区| 国产精品久久久久久久小唯西川| 一区二区视频免费完整版观看| 操日韩av在线电影| 精华区一区二区三区| 日韩午夜激情电影| 天堂网中文字幕| 亚洲午夜精品久久久久久久久| www.av天天| 成人av综合一区| 欧美性猛交xxxx乱大交91| 国产欧美高清| 国产精品无码免费专区午夜| 残酷重口调教一区二区| 精品日韩欧美| 免费看日产一区二区三区| 国产精品video| av资源中文在线| 免费91麻豆精品国产自产在线观看 | 成人一区二区三区视频| 久久国产这里只有精品| 免费欧美日韩| av免费看网址| 欧美日韩一视频区二区| 中文字幕中文字幕在线中心一区 | 亚洲欧洲日产国码av系列天堂| www.日韩高清| 欧美高清精品3d| 一区二区三区在线免费观看视频| 日韩欧美主播在线| 国产精品99无码一区二区| 亚洲男人的天堂一区二区| 萌白酱视频在线| 国产女人18水真多18精品一级做 | 人妻丰满熟妇av无码区hd| 91麻豆精品国产91久久久| 波多野结衣在线电影| 欧美日韩国内自拍| 99热在线观看免费精品| 国产精品久99| 成人性视频免费看| 欧美经典三级视频一区二区三区| 日韩乱码人妻无码中文字幕久久| 91女神在线视频| 国产精品扒开腿做爽爽爽a片唱戏| 国产乱子轮精品视频| 欧美成人手机在线视频| 麻豆精品视频在线观看免费| 国产一二三四在线视频| 日本午夜精品视频在线观看 | 成熟亚洲日本毛茸茸凸凹| 亚洲一级片av| 国产精品一区二区在线看| 激情文学亚洲色图| 国内精品第一页| 四虎国产精品永久免费观看视频| 国产真实乱子伦精品视频| 99999精品| 国产成人午夜高潮毛片| 久久久久久久久久久久国产精品| 粉嫩一区二区三区在线看| www.555国产精品免费| 99久久久国产精品| 在线观看福利片| 国产精品美女久久久久久久久久久 | 激情五月俺来也| 国产美女在线精品| 极品白嫩的小少妇| 久久综合视频网| 蜜桃av免费观看| 亚洲欧美福利一区二区| 久久久美女视频| 色综合久久综合网欧美综合网| 亚洲视屏在线观看| 欧美一区二区性放荡片| 成人午夜免费福利| 亚洲欧美国产精品| 色影院视频在线| 久久久久久久久久久国产| 成人性生活视频| 国产日韩在线播放| 红杏成人性视频免费看| 日韩hmxxxx| 欧美96在线丨欧| 久草精品在线播放| 国内一区二区在线| 日本黄色录像片| 国产精品热久久久久夜色精品三区 | 五月激情久久久| 久久久久久久中文| 久久精品国产99| 永久免费未满蜜桃| 国产亚洲1区2区3区| 国产一区二区视频在线观看免费| 岛国av一区二区三区| 91精品国产色综合久久不8| 亚洲福利视频二区| 1024免费在线视频| 91成人精品网站| 高清不卡一区| 久热国产精品视频一区二区三区| 亚洲精品国产成人影院| 天天摸天天碰天天添| 国产一区二区精品久久| 国产三级av在线播放| 一区二区激情视频| 亚洲免费视频二区| 亚洲精品色婷婷福利天堂| 国产写真视频在线观看| 日韩美女av在线免费观看| 9l视频自拍蝌蚪9l视频成人| 亚洲视频sss| 老鸭窝91久久精品色噜噜导演| 亚洲精品久久久久久| 国产精品进线69影院| 黄色污污网站在线观看| 精品91自产拍在线观看一区| 日本欧美在线视频免费观看| 88xx成人精品| jizz性欧美23| 欧美做暖暖视频| 精品一区二区精品| 老头老太做爰xxx视频| 天天亚洲美女在线视频| www男人的天堂| 日韩在线观看av| 成人黄页网站视频| 日本成人三级电影网站| 国产视频一区欧美| 这里只有精品在线观看视频| 亚洲最新在线观看| www.色视频| 欧美大片欧美激情性色a∨久久| av在线国产精品| 国产高清免费在线| 精品系列免费在线观看| 波多野结衣欲乱| 精品视频免费在线| 日韩精品成人av| 国产精品久久一区| 美女毛片一区二区三区四区最新中文字幕亚洲| 人人妻人人做人人爽| 国产成人99久久亚洲综合精品| 成人免费毛片东京热| 欧美一级高清大全免费观看| h片在线免费| **亚洲第一综合导航网站| 欧美精品一卡| 亚洲色图欧美另类| 亚洲专区一二三| 欧美一区二区公司| 91精品国产乱码久久久久久蜜臀| 欧美亚洲国产日韩| av动漫在线看| 国产视频不卡一区| 中文在线字幕免费观| 色婷婷av一区二区三区久久| 亚洲免费看片| 2022中文字幕| 91玉足脚交白嫩脚丫在线播放| www欧美在线| 国产一区二区三区在线免费观看 | av在线播放中文字幕| 欧美日韩视频在线一区二区| 欧美极品另类| 99re6在线| 99国产精品视频免费观看一公开| 在线免费播放av| 色综合久久久久久久| 日本a级在线| 亚洲最大激情中文字幕| 国产亚洲毛片在线| 久久久精品成人| 欧美大片在线观看一区二区| caoporn视频在线观看| 欧美视频1区| 狠狠色丁香九九婷婷综合五月| 久一视频在线观看| 亚洲色图激情小说| 韩国一区二区三区视频| 欧美精品一区二区三区三州| 国产亚洲人成网站| 国产黄色一区二区| 欧美亚洲视频一区二区| 欧美超碰在线| av2014天堂网| 欧美久久久久久久久| 国产精品一区二区日韩| 亚洲欧洲日韩综合二区| 成人国产亚洲欧美成人综合网| 久久精品99北条麻妃| 欧美肥臀大乳一区二区免费视频| 在线日韩一区| 亚洲国产欧美日韩在线| 在线一区二区三区四区| 午夜dj在线观看高清视频完整版| 久久久久久精| 国产精品一区二区无线| 人人爽人人爽人人片av| 美女性感视频久久久| 久久最新网址| 亚洲av熟女高潮一区二区| 欧美日本一道本| 一级毛片久久久| 欧美人与动牲交xxxxbbbb| 欧美激情一区二区三区蜜桃视频 |