精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品天天干| 中文字幕综合在线| 日韩极品视频在线观看| 色哟哟中文字幕| 国产一区二区三区久久久久久久久| 欧美变态tickle挠乳网站| 欧美狂野激情性xxxx在线观| 天天综合天天色| 欧美激情麻豆| 欧美v日韩v国产v| 欧美一区二区三区爽大粗免费| a级片免费观看| 禁久久精品乱码| 伊人久久大香线蕉av一区二区| 国产精欧美一区二区三区白种人| 羞羞电影在线观看www| 国产一区二区三区综合| 久久久久免费视频| 日韩乱码人妻无码中文字幕久久| 懂色aⅴ精品一区二区三区| 巨大荫蒂视频欧美大片| 免费在线观看不卡| 久久激情视频免费观看| 一个色综合久久| 精精国产xxxx视频在线中文版| 成人永久免费视频| 国产成人精品久久| 91porn在线视频| 国产欧美久久一区二区三区| 91精品国产91热久久久做人人 | 国产一区二区按摩在线观看| 韩日精品中文字幕| 真人bbbbbbbbb毛片| 亚洲欧美综合久久久久久v动漫| 亚洲综合色自拍一区| 日本一区二区在线视频| 一级日韩一级欧美| 欧美一级视频| 美日韩在线视频| 超碰97人人干| 懂色av色香蕉一区二区蜜桃| 亚洲激情六月丁香| 视频二区一区| 日本一区高清| 国产黄色精品视频| 国产精品美女主播| 久久夜靖品2区| 亚洲欧美综合久久久| 日韩高清中文字幕| 第一页在线视频| 福利一区二区| 日韩欧美在线第一页| 粉嫩av一区二区三区天美传媒 | 欧美四级电影在线观看| 黄色国产一级视频| a视频在线观看| 国产精品理论片| 日韩国产在线一区| 天堂网av在线播放| 大白屁股一区二区视频| 91麻豆国产精品| 亚欧视频在线观看| 黄色综合网站| 久久精品99久久香蕉国产色戒| 亚洲天堂资源在线| 日本免费一区二区三区视频| 欧美嫩在线观看| 亚洲成人福利在线观看| 三级成人在线| 欧美在线制服丝袜| 成年人免费大片| 色在线视频观看| 欧美日韩精品在线观看| 欧美精品99久久| 妞干网免费在线视频| 婷婷亚洲久悠悠色悠在线播放| 九九热只有这里有精品| 77thz桃花论族在线观看| 亚洲欧美日韩国产中文在线| 吴梦梦av在线| 亚洲精品一线| 亚洲国产裸拍裸体视频在线观看乱了| 黄瓜视频免费观看在线观看www| 欧美日本网站| 久久久影院官网| 欧美一区二区三区在线免费观看| 男人久久精品| 久久精品欧美一区二区三区麻豆| 日韩欧美视频第二区| 北岛玲一区二区三区| 久久久久久免费毛片精品| 欧美午夜免费| 视频国产在线观看| 国产亚洲精品福利| 青青影院一区二区三区四区| 免费成人av电影| 91影院在线观看| 欧美日韩系列| 成人在线观看免费| 一区二区三区中文字幕电影 | 成人av在线网站| 久久久www免费人成黑人精品| 四虎免费在线观看| 中文字幕欧美区| 色乱码一区二区三区熟女| heyzo高清国产精品| 欧美视频专区一二在线观看| 性欧美极品xxxx欧美一区二区| 国产激情精品一区二区三区| 亚洲国产精品高清久久久| 少妇光屁股影院| 亚洲成人国产| 日韩在线欧美在线国产在线| 国产乡下妇女做爰视频| 三级在线观看一区二区 | 亚洲黄色三级视频| 日韩精品亚洲一区| 91色视频在线观看| 日韩电影网址| 亚洲精品伦理在线| 老头吃奶性行交视频| 精品国产亚洲一区二区三区在线| 日韩高清不卡av| 九九热精彩视频| 日韩精品免费专区| 国产精品一区二区av| 在线观看完整版免费| 亚洲第一福利一区| 加勒比av中文字幕| 亚洲精品亚洲人成在线| 欧美老女人性视频| 中文天堂在线播放| 99视频超级精品| a级网站在线观看| www.com.cn成人| 欧美一级久久久| 少妇无套高潮一二三区| 欧美精品大片| 国产精品嫩草影院一区二区 | 亚洲九九九在线观看| 国产性xxxx| 美国三级日本三级久久99| 麻豆91蜜桃| xxx.xxx欧美| 9191久久久久久久久久久| 免费看黄色的视频| 99在线精品视频在线观看| 91欧美日韩一区| 婷婷激情在线| 91国在线观看| 18禁裸乳无遮挡啪啪无码免费| 欧美aⅴ99久久黑人专区| 国产精品永久免费视频| 天堂在线免费av| 亚洲免费av高清| 亚洲午夜精品一区| 99久久亚洲精品| 国产精品综合不卡av| 国产在线观看免费| 日本久久一区二区| 免费看污黄网站在线观看| 国产欧美短视频| 精品一区二区三区视频日产| 国产第一页在线| 精品国产凹凸成av人导航| 欧美成欧美va| 处破女av一区二区| 免费av手机在线观看| 加勒比视频一区| 久久精品国产久精国产一老狼| 国产精品无码久久av| 国产精品美女一区二区| 在线看的黄色网址| 日韩伦理视频| 成人午夜激情网| а√天堂官网中文在线| 欧美一区二区三区视频免费播放| 国产精品成人69xxx免费视频| 狠狠色丁香久久婷婷综合丁香| 午夜啪啪福利视频| 爱爱精品视频| 欧美一级视频免费在线观看| 青青免费在线视频| 日本丶国产丶欧美色综合| 国产精品无码永久免费不卡| 久久夜色精品| 亚洲精品视频一区二区三区| 国内不卡的一区二区三区中文字幕| 菠萝蜜影院一区二区免费| 国产女人18毛片水18精| 亚洲一区二区精品久久av| 日韩精品人妻中文字幕有码| 国产精品久久久久毛片大屁完整版| 久久久com| 青青青国产精品| 久久91亚洲精品中文字幕| 国产成年妇视频| 精品成人乱色一区二区| 极品人妻videosss人妻| 精品一区二区免费在线观看| 白白操在线视频| 欧美大胆视频| 国产日韩欧美在线视频观看| 色爱综合区网| 亚洲久久久久久久久久| 在线免费观看视频网站| 亚洲第一综合色| 欧美日韩生活片| 大桥未久av一区二区三区中文| 国产精品宾馆在线精品酒店| 国产成人精品免费视| 亚洲最大福利网| 92国产精品| 精品少妇一区二区30p| 日本不卡视频一区二区| 欧美精品乱码久久久久久按摩| 精品视频一区二区在线观看| 亚洲国产精华液网站w| jjzz黄色片| 久久精品123| 51xx午夜影福利| 久久av综合| 91观看网站| 九九热线视频只有这里最精品| 欧美日韩成人在线视频| 国产一二三区在线视频| 欧美成人官网二区| 在线观看中文字幕码| 狠狠做深爱婷婷久久综合一区 | 孩xxxx性bbbb欧美| 18视频免费网址在线观看| 亚洲国产精品久久久久久| 在线免费观看一区二区| 天天影视网天天综合色在线播放| 一级片一级片一级片| av在线不卡观看免费观看| 中文字幕一区二区在线观看视频 | 久久理论电影网| 国产69视频在线观看| 国内外成人在线视频| 欧美少妇性生活视频| 亚洲九九精品| 中文字幕不卡每日更新1区2区| 偷拍一区二区| 国产原创精品| 国产一区调教| 国产不卡一区二区在线观看 | 99在线观看视频| 99久热在线精品视频观看| 国产精品ⅴa在线观看h| av日韩亚洲| 日本欧美黄网站| 在线视频超级| 久久人人爽人人| 四虎影院观看视频在线观看| 久久视频在线观看免费| 在线国产91| 久久国产一区二区三区| 蜜桃视频在线观看www社区| 最近2019中文字幕大全第二页| 国产中文字幕在线看| 亚洲男人7777| 日韩av成人| 亚洲免费一在线| 国产在线视频你懂得| 国产亚洲欧美另类中文| 国产精品毛片一区二区三区四区| 亚洲男人天堂2024| 日本福利片高清在线观看| 亚洲欧美激情在线视频| 九色在线视频| 中文在线不卡视频| 淫片在线观看| 久久精品中文字幕一区| 99热国产在线中文| 日韩在线视频线视频免费网站| 欧美孕妇孕交| 在线视频欧美性高潮| 天天在线视频色| 中文字幕精品—区二区| 久久精品视频观看| 欧美精品在线播放| 国产人成网在线播放va免费| 久久成人这里只有精品| 男男gaygays亚洲| 77777亚洲午夜久久多人| 免费电影日韩网站| 国产精品黄视频| 国产精久久久| 九九九久久久| 日韩欧美精品一区| 亚洲高潮无码久久| 亚洲国产一区二区精品专区| 日日橹狠狠爱欧美超碰| 日本亚洲欧美天堂免费| 下面一进一出好爽视频| 99re热这里只有精品免费视频| 最近中文字幕无免费| 国产日韩欧美综合一区| 91嫩草丨国产丨精品| 午夜精品久久久久久久99樱桃| 6080午夜伦理| 91精品国产综合久久精品app| 亚洲第一页综合| 国产一区二区成人| 天堂成人av| 国产成人精品一区二区| 精品国产乱码久久久久久樱花| 久久精品aaaaaa毛片| 青青草国产成人a∨下载安卓| 欧洲金发美女大战黑人| 美女被久久久| 老司机av网站| 国产精品伦一区二区三级视频| 青娱乐国产精品| 在线观看视频一区二区欧美日韩| 亚洲最大成人在线视频| 日韩成人激情视频| 最新日本在线观看| 国产成人极品视频| y111111国产精品久久久| 亚洲高清精品中出| 亚洲资源av| 女王人厕视频2ⅴk| 欧美激情一区在线| 日本三级片在线观看| 91麻豆精品久久久久蜜臀| 女人天堂在线| 久久久中文字幕| 久久日本片精品aaaaa国产| 黄色国产精品一区二区三区| 91视频综合| 久久久久免费精品| 成人91在线观看| 日韩欧美123区| 欧洲日韩一区二区三区| 欧美 日韩 综合| 欧美精品在线看| 欧美亚洲韩国| 国产精品高清一区二区三区| 伊人久久大香线蕉综合网站| 日韩xxxx视频| 国产激情视频一区二区在线观看 | 水蜜桃一区二区| 国产精品国码视频| 99久久99精品| 国产精品福利在线播放| 中文字幕在线观看视频免费| 亚洲国产天堂久久综合| 亚洲区欧洲区| 97超碰人人看人人| 最新欧美人z0oozo0| 成人3d动漫一区二区三区| 亚洲中文字幕无码一区二区三区| 伊人青青综合网| 亚洲视频在线不卡| 一区二区三区丝袜| 高h调教冰块play男男双性文| 欧美精品精品精品精品免费| 精品淫伦v久久水蜜桃| 日韩av资源在线| 国产免费成人在线视频| 国产精品九九九九| 久久99久久久久久久噜噜| 福利片一区二区| 久久久免费视频网站| 国产日韩欧美在线一区| 一级黄在线观看| 欧美激情视频在线免费观看 欧美视频免费一 | 一本色道久久综合狠狠躁的番外| 欧美黄网站在线观看| 中文字幕不卡在线观看| 99久久夜色精品国产亚洲| 久久久噜噜噜久噜久久| 国产99亚洲| 亚洲精品在线网址| 亚洲综合在线免费观看| 日韩黄色影片| 91热福利电影| 国产精品久久久久久模特| 国产福利在线导航| 欧美mv和日韩mv的网站| 人人鲁人人莫人人爱精品| 欧美性受黑人性爽| 久久久亚洲午夜电影| a网站在线观看| 日韩av三级在线观看| 亚洲91精品| 波多野结衣 在线| 日韩欧美国产精品一区| 欧美黑人粗大| 国风产精品一区二区| 久久久久国产精品人| 国产国语亲子伦亲子| 国产成人精品免高潮在线观看| 午夜精彩国产免费不卡不顿大片| 成人无码www在线看免费| 91麻豆精品国产91久久久资源速度 | 精品国产乱码久久久久久果冻传媒| 国内av一区二区|