中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

【筆記】cJSON的使用經(jīng)驗(yàn)記錄-創(chuàng)新互聯(lián)

拼接兩個(gè) JSON 對(duì)象的函數(shù)
cJSON* LinkJson(cJSON* root1, cJSON* root2)
{
	if (root1 == NULL || root2 == NULL)
		return NULL;

	cJSON* res_root = cJSON_CreateObject();
	cJSON* item1 = root1->child;
	cJSON* item2 = root2->child;

	auto AddItemToObject = [&log](cJSON* root, cJSON* item)
	{
		switch (item->type)
		{
		case cJSON_Number:
			if (item->valuedouble != 0)
				cJSON_AddNumberToObject(root, item->string, item->valuedouble);
			else
				cJSON_AddNumberToObject(root, item->string, item->valueint);
			break;
		case cJSON_String:
			cJSON_AddStringToObject(root, item->string, item->valuestring);
			break;
		case cJSON_Object:
			cJSON_AddItemToObject(root, item->string, item);
			break;
		default:
			break;
		}
	};

	while (item1)
	{
		cJSON* next = item1->next;
		AddItemToObject(res_root, item1);
		item1 = next;
	}
	while (item2)
	{
		cJSON* next = item2->next;
		AddItemToObject(res_root, item2);
		item2 = next;
	}

	return res_root;
}

謹(jǐn)慎使用cJSON_Delete() 測(cè)試代碼
int main()
{
	string timestamp = "2022-11-28 16:10:35.767";

	cJSON* root1 = cJSON_CreateObject();
	{
		cJSON* item1 = GenerateJsonItem(root1, 500, "", timestamp, "Signalname_0", "0:0", "M0A0");
		cJSON* item2 = GenerateJsonItem(root1, 500, "", timestamp, "Signalname_1", "0:1", "M0A1");
		printf("item1: \n%s\n\n", cJSON_Print(item1));
		printf("item2: \n%s\n\n", cJSON_Print(item2));
		printf("root1: \n%s\n\n", cJSON_Print(root1));
		cJSON_Delete(item1);
		cJSON_Delete(root1);
		cJSON_Delete(item2);
	}
}

cJSON* GenerateJsonItem(cJSON* root, int value, string unit, string timestamp, string name, string address, string identifier)
{
	cJSON* Signal = cJSON_CreateObject();
	cJSON_AddNumberToObject(Signal, "Value", value);
	cJSON_AddStringToObject(Signal, "Unit", unit.c_str());
	cJSON_AddStringToObject(Signal, "Timestamp", timestamp.c_str());
	cJSON_AddStringToObject(Signal, "Name", name.c_str());
	cJSON_AddStringToObject(Signal, "Address", address.c_str());
	cJSON_AddStringToObject(Signal, "Identifier", identifier.c_str());
	if (root != nullptr)
		cJSON_AddItemToObject(root, identifier.c_str(), Signal);
	return Signal;
}

創(chuàng)建了兩個(gè) cjson “對(duì)象” item1 與 item2 ,然后都插入 cjson “對(duì)象” root1 ,在調(diào)用cJSON_Delete(item1);之后調(diào)用cJSON_Delete(root1);或是cJSON_Delete(root1);都會(huì)導(dǎo)致程序崩潰。

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括東豐網(wǎng)站建設(shè)、東豐網(wǎng)站制作、東豐網(wǎng)頁(yè)制作以及東豐網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,東豐網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到東豐省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!崩潰原因

調(diào)用cJSON_Delete(item1)之后,item1 的參數(shù)全部失效,但自身的值還未置空。

在這里插入圖片描述

之后調(diào)用cJSON_Delete(root1),進(jìn)入 while 循環(huán),檢測(cè)到 root1 的 child 指針指向 item1 “對(duì)象”,第一個(gè) if 條件觸發(fā),進(jìn)入1層嵌套,相當(dāng)于再次調(diào)用了cJSON_Delete(item1)。
在這里插入圖片描述
在 Debug 模式下,item1 的 child 指針的值被設(shè)為 0xfeeefeee ,非空,再次觸發(fā)第一個(gè) if 條件,,進(jìn)入2層嵌套,相當(dāng)于調(diào)用cJSON_Delete(0xfeeefeee)。
第二層嵌套中嘗試從 0xfeeefeee 獲取 next 指針觸發(fā)程序斷點(diǎn)。
在這里插入圖片描述

結(jié)論
  • 仍可以把用 cJSON 組織的 JSON 數(shù)據(jù)視為樹(shù)結(jié)構(gòu)。這個(gè)樹(shù)結(jié)構(gòu)中,所有兄弟節(jié)點(diǎn)都形成一個(gè)雙向循環(huán)鏈表。
  • cJSON_Delete()會(huì)刪除一個(gè)節(jié)點(diǎn)的所有兄弟結(jié)點(diǎn)和以它們?yōu)楦淖訕?shù)??赡苓€存在其他節(jié)點(diǎn)的指針指向被刪除節(jié)點(diǎn),所以應(yīng)盡可能謹(jǐn)慎使用cJSON_Delete()。
  • 盡量只對(duì)沒(méi)有兄弟結(jié)點(diǎn)的節(jié)點(diǎn)或根節(jié)點(diǎn)調(diào)用cJSON_Delete()

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前題目:【筆記】cJSON的使用經(jīng)驗(yàn)記錄-創(chuàng)新互聯(lián)
地址分享:http://www.rwnh.cn/article24/dcidje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、面包屑導(dǎo)航、微信小程序網(wǎng)站排名、App開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
梁平县| 鄂伦春自治旗| 天门市| 古蔺县| 德州市| 湖口县| 深水埗区| 达尔| 黔南| 水富县| 淳安县| 江都市| 株洲市| 敖汉旗| 齐河县| 诸城市| 华容县| 新龙县| 府谷县| 长乐市| 大新县| 若羌县| 玉溪市| 社会| 乌兰县| 疏勒县| 乐东| 固原市| 白山市| 休宁县| 防城港市| 松溪县| 台州市| 霞浦县| 潞城市| 兴安县| 扶风县| 临沭县| 阿鲁科尔沁旗| 德江县| 巴林右旗|