欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

【C語(yǔ)言進(jìn)階】想用好C++?那就一定要掌握動(dòng)態(tài)內(nèi)存管理-創(chuàng)新互聯(lián)

目錄

創(chuàng)新互聯(lián)主營(yíng)瀘水網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件開發(fā),瀘水h5微信小程序定制開發(fā)搭建,瀘水網(wǎng)站營(yíng)銷推廣歡迎瀘水等地區(qū)企業(yè)咨詢

🤩前言🤩:

一、動(dòng)態(tài)內(nèi)存概述??:

? 1.什么是動(dòng)態(tài)內(nèi)存:

? 2.動(dòng)態(tài)內(nèi)存分配的意義:

二、常用的動(dòng)態(tài)內(nèi)存函數(shù)🏹:

? 1. malloc 和 free函數(shù):

? ①. malloc 函數(shù):

? ②. free 函數(shù):

? ③. malloc 函數(shù)與 free 函數(shù)的使用:

? 2. calloc 函數(shù):

3. realloc 函數(shù):

三、常見動(dòng)態(tài)內(nèi)存錯(cuò)誤🛡?:

? 1.對(duì) NULL 指針的解引用操作:

? 2.對(duì)動(dòng)態(tài)內(nèi)存空間的越界訪問;

? 3.對(duì)非動(dòng)態(tài)內(nèi)存空間使用 free 函數(shù):

? 4.使用 free 函數(shù)釋放動(dòng)態(tài)內(nèi)存空間的一部分:

? 5.對(duì)同一塊動(dòng)態(tài)內(nèi)存空間多次釋放:

? 6.不釋放動(dòng)態(tài)內(nèi)存空間(內(nèi)存泄漏):

🥳總結(jié)🥳:


🛰?博客主頁(yè):??鑾同學(xué)的干貨分享基地

🛰?歡迎關(guān)注:👍點(diǎn)贊🙌收藏??留言

🛰?系列專欄:💐【進(jìn)階】C語(yǔ)言學(xué)習(xí)

🛰?代碼倉(cāng)庫(kù):🎉VS2022_C語(yǔ)言倉(cāng)庫(kù)

? 家人們更新不易,你們的👍點(diǎn)贊👍和👉關(guān)注👈真的對(duì)我真重要,各位路過的友友麻煩多多點(diǎn)贊關(guān)注,歡迎你們的私信提問,感謝你們的轉(zhuǎn)發(fā)!

?關(guān)注我,關(guān)注我,關(guān)注我,你們將會(huì)看到更多的優(yōu)質(zhì)內(nèi)容!!


🏡🏡本文重點(diǎn)🏡🏡:

🚅動(dòng)態(tài)內(nèi)存🚃動(dòng)態(tài)內(nèi)存函數(shù)🚃常見動(dòng)態(tài)內(nèi)存錯(cuò)誤🚏🚏

?

🤩前言🤩:

? C 語(yǔ)言是一門神奇、實(shí)用而又基礎(chǔ)的語(yǔ)言,我們幾乎可以說所有的編程語(yǔ)言,都是在 C 語(yǔ)言的基礎(chǔ)上發(fā)展而來的。許多小伙伴們學(xué)習(xí) C 語(yǔ)言的目的,都是為了繼續(xù)學(xué)習(xí)其它的高級(jí)語(yǔ)言,而我們學(xué)習(xí)各種語(yǔ)言的最終目的,一定是為了寫出更好的代碼和程序,尋找一份滿意的工作。

? 而今天這篇博客的內(nèi)容,就是關(guān)于如何通過開辟動(dòng)態(tài)內(nèi)存,從而寫出更加優(yōu)秀的程序的。同時(shí)今天的內(nèi)容對(duì)于以后想要繼續(xù)學(xué)習(xí) C++ 的同學(xué)們來說尤為重要,希望各位小伙伴們能夠認(rèn)真學(xué)習(xí)仔細(xì)思考,多多練習(xí)牢固掌握。

一、動(dòng)態(tài)內(nèi)存概述??:

? 接下來我們就正式開始關(guān)于動(dòng)態(tài)內(nèi)存的學(xué)習(xí),首先我們先來大致了解一下動(dòng)態(tài)內(nèi)存。

? 1.什么是動(dòng)態(tài)內(nèi)存:

在c/c++語(yǔ)言中,所謂動(dòng)態(tài)內(nèi)存分配,就是指在程序執(zhí)行的過程中動(dòng)態(tài)地分配或者回收存儲(chǔ)空間的分配內(nèi)存的方法。動(dòng)態(tài)內(nèi)存分配不像數(shù)組等靜態(tài)內(nèi)存分配方法那樣需要預(yù)先分配存儲(chǔ)空間,而是由系統(tǒng)根據(jù)程序的需要即時(shí)分配,且分配的大小就是程序要求的大小。

? 2.動(dòng)態(tài)內(nèi)存分配的意義:

? 我們?cè)谥暗膶W(xué)習(xí)過程中,在使用各種變量與數(shù)組等等功能時(shí),都需要從內(nèi)存中開辟出一片空間用于存放我們的數(shù)據(jù),而在之前我們掌握的內(nèi)存開辟方式有:

int value = 20;
//在內(nèi)存棧空間上開辟4個(gè)字節(jié)的空間

char arr[10] = { 0 };
//在棧空間上開辟10個(gè)字節(jié)的連續(xù)空間

? 但是我們最經(jīng)常時(shí)使用的這兩種內(nèi)存空間的開辟方式有一些共同的特點(diǎn):

1. 空間開辟大小是固定的。

2. 數(shù)組在申明的時(shí)候必須指定數(shù)組的長(zhǎng)度,它所需要的內(nèi)存將會(huì)在編譯時(shí)分配。

? 換句話說,這兩種內(nèi)存開辟方式都是靜態(tài)內(nèi)存分配。

但是我們?cè)谌粘5拇a編寫和程序使用過程中,對(duì)于空間的需求往往不僅限于上述情況。更多的時(shí)候我們需要的空間大小只有在在程序運(yùn)行的時(shí)候才能知道。如此,數(shù)組等在編譯時(shí)開辟空間的方式無法滿足我們的實(shí)際運(yùn)行需求。

例如:

1. 通訊錄創(chuàng)建聯(lián)系人數(shù)據(jù) data[1000],實(shí)際有聯(lián)系人13個(gè),造成大量的空間浪費(fèi)。

2. 通訊錄創(chuàng)建聯(lián)系人數(shù)據(jù) data[20],后期共有聯(lián)系人113人,初期開辟的空間不夠用。

? 于是就需要使用一種更好的內(nèi)存分配方式進(jìn)行處理,動(dòng)態(tài)內(nèi)存分配應(yīng)運(yùn)而生。

二、常用的動(dòng)態(tài)內(nèi)存函數(shù)🏹: ? ? ? ? 1. malloc 和 free:

? malloc 函數(shù)(memory allocate,即內(nèi)存分配)的作用為向內(nèi)存的堆區(qū)申請(qǐng)空間用于存儲(chǔ)數(shù)據(jù),free 函數(shù)的作用為釋放使用 malloc 函數(shù)向堆區(qū)申請(qǐng)的空間,并將空間歸還給內(nèi)存的堆區(qū)空間,通過配合使用這兩個(gè)函數(shù)可以從堆區(qū)申請(qǐng)(釋放)動(dòng)態(tài)內(nèi)存空間。

? ①. malloc 函數(shù):

? 我們首先來看 malloc 函數(shù):

? 我們可以看到,malloc? 函數(shù)的使用格式為:

void* malloc (size_t size);

? 從它的使用格式中我們可以看出,該函數(shù)向堆區(qū)申請(qǐng)了一塊連續(xù)的空間,同時(shí)返回的是這塊空間的指針。

★ 如果開辟成功,則返回一個(gè)指向開辟好空間的指針。

★ 如果開辟失敗,則返回一個(gè) NULL 指針,故我們?cè)谑褂脮r(shí)一定要仔細(xì)檢查?malloc 函數(shù)的返回值。

★ 返回值的類型是 void* ,即 malloc 函數(shù)并不了解開辟空間的類型,至于空間的具體類型將在使用時(shí)由使用者自己決定。

★ 如果參數(shù) size 為 0,則 malloc 函數(shù)的行為是標(biāo)準(zhǔn)未定義的,將會(huì)取決于編譯器。

? ②. free 函數(shù):

? 我們同樣先來看看我們的 free 函數(shù):

? 我們可以看到,free 函數(shù)的使用格式為:

void free (void* ptr);

? 不同的是,與 malloc?函數(shù)恰好相反,free函數(shù)的作用為釋放動(dòng)態(tài)開辟的內(nèi)存,同時(shí)沒有返回值:

★ 如果參數(shù) ptr 指向的空間不是動(dòng)態(tài)開辟的,那free函數(shù)的行為是未定義的。

★ 如果參數(shù) ptr 是NULL指針,則 free 函數(shù)將什么都不會(huì)做。

? ③. malloc 函數(shù)與 free 函數(shù)的使用:

? 關(guān)于兩個(gè)函數(shù)的實(shí)際使用,我們直接來看下面這段?malloc 函數(shù)與 free 函數(shù)的使用實(shí)例:

#include#includeint main()
{
	int* ptr = NULL;
	//初始化指針

	ptr = (int*)malloc(40);
	//使用malloc函數(shù)動(dòng)態(tài)申請(qǐng)40字節(jié)空間
	//同時(shí)因?yàn)橹羔榩tr類型為int*,而 malloc 函數(shù)的返回類型為void*,故使用強(qiáng)制類型轉(zhuǎn)換

	int* p = ptr;
	//在此定義指針p的原因是,在之后的使用中,指針p的指向會(huì)發(fā)生改變
	//若不對(duì)初始指針指向進(jìn)行保存,將無法釋放改變前與改變后之間的空間

	if (p == NULL)
	//mallocc函數(shù)在動(dòng)態(tài)空間開辟失敗時(shí)返回空指針
	//即若此處為空指針,說明動(dòng)態(tài)內(nèi)存空間申請(qǐng)失敗
	{
		perror("malloc");
		//打印malloc函數(shù)動(dòng)態(tài)空間申請(qǐng)錯(cuò)誤原因,并結(jié)束程序
		return 1;
	}

	//沒有結(jié)束說明指針不為空,動(dòng)態(tài)空間申請(qǐng)成功
	int i = 0;
	for (i = 0; i< 10; i++)
	{
		*p = i;
		//循環(huán)向動(dòng)態(tài)內(nèi)存空間中存入數(shù)據(jù)

		p++;
		//在此處的操作中,指針p的指向發(fā)生了改變
	}

	//使用完成后釋放動(dòng)態(tài)內(nèi)存空間:
	free(ptr);
	//指針p指向發(fā)生改變,但指針ptr仍指向初始指針
	
	ptr = NULL;
	//動(dòng)態(tài)內(nèi)存空間歸還后,重新將指針ptr置空
	//動(dòng)態(tài)內(nèi)存空間已經(jīng)歸還,若不將指針ptr進(jìn)行置空,指針ptr將變?yōu)橐爸羔槪赶驅(qū)⒉豢煽兀@在程序運(yùn)行中非常危險(xiǎn)

	return 0;
}

? 具體的使用方法在注釋中已經(jīng)注明了,在這里我們要在對(duì)其中幾個(gè)地方再次進(jìn)行強(qiáng)調(diào):

1. 在對(duì)指針進(jìn)行操作前一定要保存指向初始位置的原始指針。

2. 在對(duì)指向動(dòng)態(tài)內(nèi)存空間的指針進(jìn)行使用前,一定要進(jìn)行非空判斷。

3. 在動(dòng)態(tài)內(nèi)存空間使用完畢并釋放后,一定要將指針進(jìn)行置空操作。

4. 當(dāng)程序結(jié)束時(shí)若動(dòng)態(tài)內(nèi)存空間沒有被釋放,將會(huì)被操作系統(tǒng)自動(dòng)回收。

5. 但若程序不結(jié)束且申請(qǐng)的動(dòng)態(tài)內(nèi)存空間持續(xù)不歸還,動(dòng)態(tài)內(nèi)存將不會(huì)被回收,就會(huì)導(dǎo)致內(nèi)存泄漏問題。

? 2. calloc 函數(shù):

? 我們來看這個(gè)函數(shù):

? 可以看到,calloc 函數(shù)的使用格式為:

void* calloc (size_t num, size_t size);

? 更通俗的說,calloc 函數(shù)的功能就是,為 num 個(gè)大小為 size 的元素開辟一塊動(dòng)態(tài)內(nèi)存空間,并將空間內(nèi)每個(gè)字節(jié)都初始化為 0。

? 其使用方式與 malloc 函數(shù)無異:

#include#includeint main()
{
	int* ptr = NULL;

	ptr = (int*)calloc(10, sizeof(int));
	//使用calloc函數(shù)動(dòng)態(tài)申請(qǐng)10個(gè)int類型大小的空間
	//同時(shí)因?yàn)橹羔榩tr類型為int*,而calloc函數(shù)的返回類型為void*,故使用強(qiáng)制類型轉(zhuǎn)換

	int* p = ptr;
	if (p == NULL)
	{
		perror("calloc");
		return 1;
	}
	int i = 0;
	for (i = 0; i< 10; i++)
	{
		*p = i;
		p++;
	}
	free(ptr);
	ptr = NULL;

	return 0;
}

并且實(shí)際作用相比較來說,與函數(shù) malloc 的區(qū)別僅在于 calloc 函數(shù)在返回地址前會(huì)把申請(qǐng)的空間內(nèi)每個(gè)字節(jié)都初始化為 0?,其它方面完全相同。

? 也就是說,如果我們需要將申請(qǐng)來的動(dòng)態(tài)內(nèi)存空間進(jìn)行初始化,那么我們就可以通過使用 calloc 函數(shù)來達(dá)到我們的目的。

3. realloc 函數(shù):

? 我們來看 realloc 函數(shù):

? realloc 函數(shù)(re - allocate,即重新分配)的作用為重新分配從堆區(qū)申請(qǐng)來的動(dòng)態(tài)內(nèi)存空間的大小。其使用格式為:

void* realloc (void* ptr, size_t size);

? 前面 malloc 、free 與 calloc 三個(gè)函數(shù)的存在,都是為了向堆區(qū)申請(qǐng)或釋放動(dòng)態(tài)內(nèi)存空間,但是倘若只使用前三個(gè)函數(shù),我們可以發(fā)現(xiàn),申請(qǐng)來的內(nèi)存空間的看起來與靜態(tài)內(nèi)存空間似乎沒有什么太大的區(qū)別。

于是,recalloc 函數(shù)出現(xiàn)了。

? realloc 函數(shù)的出現(xiàn),使得動(dòng)態(tài)內(nèi)存管理更加的靈活。例如有些時(shí)侯我們覺得前面申請(qǐng)的空間太小了不夠用,或者我們會(huì)覺得申請(qǐng)的空間過大了太浪費(fèi),這個(gè)時(shí)候我們就可以通過使用?realloc 函數(shù)對(duì)之前開辟的動(dòng)態(tài)內(nèi)存空間的大小再次進(jìn)行合理的調(diào)整。

? 換句話說,正是 realloc 函數(shù)才使得動(dòng)態(tài)內(nèi)存空間真正變得“ 動(dòng)態(tài) ”起來。

? 例如我們可以直接修改上面的例子,當(dāng)我們?cè)谑褂眠^程中發(fā)現(xiàn)我們申請(qǐng)來的動(dòng)態(tài)內(nèi)存空間不夠用時(shí),我們就可以通過使用 realloc 函數(shù)來對(duì)我們申請(qǐng)來的動(dòng)態(tài)內(nèi)存空間進(jìn)行擴(kuò)容:

#include#includeint main()
{
	int* ptr = NULL;
	ptr = (int*)malloc(40);
	int* p = ptr;
	if (p == NULL)
	{
		perror("malloc");
		return 1;
	}
	int i = 0;
	for (i = 0; i< 10; i++)
	{
		*p = i;
		p++;
	}

	realloc(ptr, 80);
	//空間不夠用,重新分配更大的空間
    //將指針ptr指向的空間擴(kuò)容至80字節(jié)

	free(ptr);
	PTR = NULL;

	return 0;
}

? 但哪怕是在成功擴(kuò)容時(shí),也仍會(huì)出現(xiàn)兩種情況:當(dāng)前空間與后相鄰空間之間的空間是否足夠 realloc 函數(shù)進(jìn)行擴(kuò)容操作。

★ 若空間足夠,則直接執(zhí)行擴(kuò)容操作,并在擴(kuò)容完成后返回指向起始位置的指針。

★?若空間不夠,則將會(huì)在堆區(qū)中重新尋找合適的空間(足以容納下擴(kuò)容后的全部空間),并將原空間內(nèi)的數(shù)據(jù)全部拷貝過來,接著釋放原空間,并在擴(kuò)容完成后返回指向新空間起始位置的指針。

? 但是還有最特殊的情況,即內(nèi)存堆空間中沒有能夠容納整個(gè)擴(kuò)容后的動(dòng)態(tài)內(nèi)存空間的空間時(shí),將會(huì)返回空指針。所以,我們?cè)谙胍褂脭U(kuò)容后的動(dòng)態(tài)內(nèi)存空間時(shí),為了避免使用指針內(nèi)容為空指針而造成的意外錯(cuò)誤,在使用之前首先應(yīng)當(dāng)對(duì) realloc 函數(shù)返回的指針進(jìn)行非空判斷,之后再拿來使用:

#include#includeint main()
{
	int* ptr = NULL;
	ptr = (int*)malloc(40);

	int* PTR = NULL;
	PTR = (int*)realloc(ptr, 80);
	int* p = NULL;
	//空間不夠用,重新分配更大的空間
	//將指針ptr指向的空間擴(kuò)容至80字節(jié)

	if (PTR != NULL)
	//使用前進(jìn)行非空判斷,避免出現(xiàn)無法預(yù)料的錯(cuò)誤
	{
		p = PTR;
	}

	//判斷非空,即擴(kuò)容成功,開始使用:
	int i = 0;
	for (i = 0; i< 20; i++)
	{
		*p = i;
		p++;
	}

	free(PTR);
	PTR = NULL;

	return 0;
}
三、常見動(dòng)態(tài)內(nèi)存錯(cuò)誤🛡?: ? ? ? ? 1.對(duì) NULL 指針的解引用操作:
int main()
{
	int* p = (int*)malloc(INT_MAX);
	//當(dāng)嘗試開辟的空間過大時(shí),將會(huì)導(dǎo)致動(dòng)態(tài)內(nèi)存開辟失敗
	//此時(shí)malloc函數(shù)將會(huì)返回空指針,即此時(shí)指針p也是空指針

	*p = 20;
	//沒有判斷非空就對(duì)指針p進(jìn)行解引用操作,導(dǎo)致產(chǎn)生對(duì)空指針進(jìn)行了解引用操作
	//將會(huì)造成內(nèi)存非法訪問的錯(cuò)誤

    free(p);
	p = NULL;

	return 0;
}

? 避免出現(xiàn)此類問題的方法是,在指針使用前對(duì) malloc 等函數(shù)的返回值進(jìn)行非空判斷。

? 2.對(duì)動(dòng)態(tài)內(nèi)存空間的越界訪問;
int main()
{
	int* p = (int*)malloc(10 * sizeof(int));
	if (NULL == p)
	{
		perror("malloc");
		return 1;
	}
	int i = 0;
	for (i = 0; i<= 10; i++)
	{
		*(p + i) = i;
		//當(dāng)i=0時(shí),將會(huì)出現(xiàn)越界訪問的錯(cuò)誤
	}

	free(p);
	p = NULL;

	return 0;
}

? 避免此類錯(cuò)誤的方式是,在使用時(shí)仔細(xì)認(rèn)真的進(jìn)行內(nèi)存邊界的檢查,并選擇合適的空間訪問范圍。

? 3.對(duì)非動(dòng)態(tài)內(nèi)存空間使用 free 函數(shù):
int main()
{
	int a = 10;
	//變量a所使用的內(nèi)存空間不是動(dòng)態(tài)內(nèi)存空間
	int* p = &a;

	free(p);
	//釋放非動(dòng)態(tài)內(nèi)存空間
    p = NULL;

	return 0;
}

? 避免此類錯(cuò)誤的方式是,在進(jìn)行空間釋放時(shí)注意區(qū)分靜態(tài)內(nèi)存空間與動(dòng)態(tài)內(nèi)存空間。

? 4.使用 free 函數(shù)釋放動(dòng)態(tài)內(nèi)存空間的一部分:
int main()
{
	int* p = (int*)malloc(10 * sizeof(int));
	if (p == NULL)
	{
		perror("malloc");
		return 1;
	}
	int i = 0;
	for (i = 0; i< 10; i++)
	{
		*p = i;
		p++;
		//此時(shí)指針p的指向已經(jīng)發(fā)生變化,不再指向起始位置
	}

	free(p);
	//釋放部分動(dòng)態(tài)內(nèi)存空間
	p = NULL;

	return 0;
}

? 避免此類錯(cuò)誤的方法是,在使用指針前保存好初始指向,并在進(jìn)行動(dòng)態(tài)內(nèi)存釋放時(shí)釋放完整的動(dòng)態(tài)內(nèi)存空間。

? 5.對(duì)同一塊動(dòng)態(tài)內(nèi)存空間多次釋放:
int main()
{
	int* p = (int*)malloc(10 * sizeof(int));

	free(p);
	//...(在中間又進(jìn)行了很多其它操作之后,忘記了已經(jīng)釋放過動(dòng)態(tài)內(nèi)存空間,并進(jìn)行了重復(fù)釋放)
	free(p);
	//重復(fù)釋放動(dòng)態(tài)內(nèi)存空間
	p = NULL;

	return 0;
}

? 避免此類問題的方法是,在已經(jīng)釋放過動(dòng)態(tài)內(nèi)存空間之后,一定要加以注釋以提醒自己避免重復(fù)釋放同一塊動(dòng)態(tài)內(nèi)存空間。

? 6.不釋放動(dòng)態(tài)內(nèi)存空間(內(nèi)存泄漏):
void test()
{
	int* p = (int*)malloc(10 * sizeof(int));
	if (p != NULL)
	{
		*p = 20;
		//判斷非空后進(jìn)行使用
	}
	//使用后沒有釋放動(dòng)態(tài)內(nèi)存空間,在程序終止前該動(dòng)態(tài)內(nèi)存空間都將無法被釋放,將會(huì)逐漸蠶食計(jì)算機(jī)系統(tǒng)的內(nèi)存
}

int main()
{
	test();
	while (1);
	//為了演示內(nèi)存泄漏,使程序永不終止


	return 0;
}

? 避免此類問題的方法是,永遠(yuǎn)記住,使用一個(gè)釋放一個(gè),使用結(jié)束立刻釋放。

🥳總結(jié)🥳:

? 到這里我們今天關(guān)于動(dòng)態(tài)內(nèi)存管理的介紹與學(xué)習(xí)就結(jié)束啦,通過今天內(nèi)容的學(xué)習(xí),相信各位小伙伴們已經(jīng)掌握了動(dòng)態(tài)內(nèi)存的開辟、釋放與動(dòng)態(tài)修改,并且已經(jīng)對(duì)動(dòng)態(tài)內(nèi)存空間的各項(xiàng)使用注意事項(xiàng)有了一定的認(rèn)知和了解。希望小伙伴們?cè)谙氯ヒ院螅趯?duì)動(dòng)態(tài)內(nèi)存空間的使用和管理中一定要慎之又慎,盡大可能避免出現(xiàn)類似的相關(guān)問題。

🔥🔥只有承擔(dān)起旅途風(fēng)雨,才能最終守得住彩虹滿天!!!🔥🔥

更新不易,辛苦各位小伙伴們動(dòng)動(dòng)小手,👍三連走一走💕💕 ~ ~ ~? 你們真的對(duì)我很重要!最后,本文仍有許多不足之處,歡迎各位認(rèn)真讀完文章的小伙伴們隨時(shí)私信交流、批評(píng)指正!

你是否還在尋找穩(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)前文章:【C語(yǔ)言進(jìn)階】想用好C++?那就一定要掌握動(dòng)態(tài)內(nèi)存管理-創(chuàng)新互聯(lián)
鏈接分享:http://chinadenli.net/article0/cohdoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)網(wǎng)站建設(shè)靜態(tài)網(wǎng)站全網(wǎng)營(yíng)銷推廣搜索引擎優(yōu)化網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(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í)需注明來源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管