在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言內(nèi)存錯(cuò)誤的原因及解決辦法?

Q4MP_gh_c472c21 ? 來(lái)源:博客 ? 作者:博客 ? 2020-08-31 14:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、指針沒有指向一塊合法的內(nèi)存

定義了指針變量,但是沒有為指針?lè)峙鋬?nèi)存,即指針沒有指向一塊合法的內(nèi)存。淺顯的例子就不舉了,這里舉幾個(gè)比較隱蔽的例子。

1、結(jié)構(gòu)體成員指針未初始化

struct student

{

char *name;

int score;

}stu,*pstu;

intmain()

{

strcpy(stu.name,“Jimy”);

stu.score = 99;

return 0;

}

很多初學(xué)者犯了這個(gè)錯(cuò)誤還不知道是怎么回事。這里定義了結(jié)構(gòu)體變量stu,但是他沒想到這個(gè)結(jié)構(gòu)體內(nèi)部char *name 這成員在定義結(jié)構(gòu)體變量stu 時(shí),只是給name 這個(gè)指針變量本身分配了4 個(gè)字節(jié)。name 指針并沒有指向一個(gè)合法的地址,這時(shí)候其內(nèi)部存的只是一些亂碼。所以在調(diào)用strcpy 函數(shù)時(shí),會(huì)將字符串“Jimy”往亂碼所指的內(nèi)存上拷貝,而這塊內(nèi)存name 指針根本就無(wú)權(quán)訪問(wèn),導(dǎo)致出錯(cuò)。解決的辦法是為name 指針malloc 一塊空間。

同樣,也有人犯如下錯(cuò)誤:

intmain()

{

pstu = (struct student*)malloc(sizeof(struct student));

strcpy(pstu-》name,“Jimy”);

pstu-》score = 99;

free(pstu);

return 0;

}

為指針變量pstu 分配了內(nèi)存,但是同樣沒有給name 指針?lè)峙鋬?nèi)存。錯(cuò)誤與上面第一種情況一樣,解決的辦法也一樣。這里用了一個(gè)malloc 給人一種錯(cuò)覺,以為也給name 指針?lè)峙淞藘?nèi)存。

2、沒有為結(jié)構(gòu)體指針?lè)峙渥銐虻膬?nèi)存

intmain()

{

pstu = (struct student*)malloc(sizeof(struct student*));

strcpy(pstu-》name,“Jimy”);

pstu-》score = 99;

free(pstu);

return 0;

}

為pstu 分配內(nèi)存的時(shí)候,分配的內(nèi)存大小不合適。這里把sizeof(struct student)誤寫為sizeof(struct student*)。當(dāng)然name 指針同樣沒有被分配內(nèi)存。解決辦法同上。

3、函數(shù)的入口校驗(yàn)

不管什么時(shí)候,我們使用指針之前一定要確保指針是有效的。

一般在函數(shù)入口處使用assert(NULL != p)對(duì)參數(shù)進(jìn)行校驗(yàn)。在非參數(shù)的地方使用if(NULL != p)來(lái)校驗(yàn)。但這都有一個(gè)要求,即p 在定義的同時(shí)被初始化為NULL 了。比如上面的例子,即使用if(NULL != p)校驗(yàn)也起不了作用,因?yàn)閚ame 指針并沒有被初始化為NULL,其內(nèi)部是一個(gè)非NULL 的亂碼。

assert 是一個(gè)宏,而不是函數(shù),包含在assert.h 頭文件中。如果其后面括號(hào)里的值為假,則程序終止運(yùn)行,并提示出錯(cuò);如果后面括號(hào)里的值為真,則繼續(xù)運(yùn)行后面的代碼。這個(gè)宏只在Debug 版本上起作用,而在Release 版本被編譯器完全優(yōu)化掉,這樣就不會(huì)影響代碼的性能。

有人也許會(huì)問(wèn),既然在Release 版本被編譯器完全優(yōu)化掉,那Release 版本是不是就完全沒有這個(gè)參數(shù)入口校驗(yàn)了呢?這樣的話那不就跟不使用它效果一樣嗎?

是的,使用assert 宏的地方在Release 版本里面確實(shí)沒有了這些校驗(yàn)。但是我們要知道,assert 宏只是幫助我們調(diào)試代碼用的,它的一切作用就是讓我們盡可能的在調(diào)試函數(shù)的時(shí)候把錯(cuò)誤排除掉,而不是等到Release 之后。它本身并沒有除錯(cuò)功能。再有一點(diǎn)就是,參數(shù)出現(xiàn)錯(cuò)誤并非本函數(shù)有問(wèn)題,而是調(diào)用者傳過(guò)來(lái)的實(shí)參有問(wèn)題。assert 宏可以幫助我們定位錯(cuò)誤,而不是排除錯(cuò)誤。

二、內(nèi)存分配成功,但并未初始化

犯這個(gè)錯(cuò)誤往往是由于沒有初始化的概念或者是以為內(nèi)存分配好之后其值自然為0。未初始化指針變量也許看起來(lái)不那么嚴(yán)重,但是它確確實(shí)實(shí)是個(gè)非常嚴(yán)重的問(wèn)題,而且往往出現(xiàn)這種錯(cuò)誤很難找到原因。

曾經(jīng)有一個(gè)學(xué)生在寫一個(gè)windows 程序時(shí),想調(diào)用字庫(kù)的某個(gè)字體。而調(diào)用這個(gè)字庫(kù)需要填充一個(gè)結(jié)構(gòu)體。他很自然的定義了一個(gè)結(jié)構(gòu)體變量,然后把他想要的字庫(kù)代碼賦值給了相關(guān)的變量。但是,問(wèn)題就來(lái)了,不管怎么調(diào)試,他所需要的這種字體效果總是不出來(lái)。我在檢查了他的代碼之后,沒有發(fā)現(xiàn)什么問(wèn)題,于是單步調(diào)試。在觀察這個(gè)結(jié)構(gòu)體變量的內(nèi)存時(shí),發(fā)現(xiàn)有幾個(gè)成員的值為亂碼。就是其中某一個(gè)亂碼惹得禍!因?yàn)橄到y(tǒng)會(huì)按照這個(gè)結(jié)構(gòu)體中的某些特定成員的值去字庫(kù)中尋找匹配的字體,當(dāng)這些值與字庫(kù)中某種字體的某些項(xiàng)匹配時(shí),就調(diào)用這種字體。但是很不幸,正是因?yàn)檫@幾個(gè)亂碼,導(dǎo)致沒有找到相匹配的字體!因?yàn)橄到y(tǒng)并無(wú)法區(qū)分什么數(shù)據(jù)是亂碼,什么數(shù)據(jù)是有效的數(shù)據(jù)。只要有數(shù)據(jù),系統(tǒng)就理所當(dāng)然的認(rèn)為它是有效的。

也許這種嚴(yán)重的問(wèn)題并不多見,但是也絕不能掉以輕心。所以在定義一個(gè)變量時(shí),第一件事就是初始化。你可以把它初始化為一個(gè)有效的值,比如:

int i = 10;

char *p = (char *)malloc(sizeof(char));

但是往往這個(gè)時(shí)候我們還不確定這個(gè)變量的初值,這樣的話可以初始化為0 或NULL。

int i = 0;

char *p = NULL;

如果定義的是數(shù)組的話,可以這樣初始化:

int a[10] = {0};

或者用memset 函數(shù)來(lái)初始化為0:

memset(a,0,sizeof(a));

memset 函數(shù)有三個(gè)參數(shù),第一個(gè)是要被設(shè)置的內(nèi)存起始地址;第二個(gè)參數(shù)是要被設(shè)置的值;第三個(gè)參數(shù)是要被設(shè)置的內(nèi)存大小,單位為byte。這里并不想過(guò)多的討論memset 函數(shù)的用法,如果想了解更多,請(qǐng)參考相關(guān)資料。

至于指針變量如果未被初始化,會(huì)導(dǎo)致if 語(yǔ)句或assert 宏校驗(yàn)失敗。這一點(diǎn),上面已有分析。

三、為指針?lè)峙涞膬?nèi)存太小

為指針?lè)峙淞藘?nèi)存,但是內(nèi)存大小不夠,導(dǎo)致出現(xiàn)越界錯(cuò)誤。

char *p1 = “abcdefg”;

char *p2 = (char *)malloc(sizeof(char)*strlen(p1));

strcpy(p2,p1);

p1 是字符串常量,其長(zhǎng)度為7 個(gè)字符,但其所占內(nèi)存大小為8 個(gè)byte。初學(xué)者往往忘了字符串常量的結(jié)束標(biāo)志“\0”。這樣的話將導(dǎo)致p1 字符串中最后一個(gè)空字符“\0”沒有被拷貝到p2 中。解決的辦法是加上這個(gè)字符串結(jié)束標(biāo)志符:

char *p2 = (char *)malloc(sizeof(char)*strlen(p1)+1*sizeof(char));

這里需要注意的是,只有字符串常量才有結(jié)束標(biāo)志符。比如下面這種寫法就沒有結(jié)束標(biāo)志符了:

char a[7] = {‘a(chǎn)’,’b’,’c’,’d’,’e’,’f’,’g’};

另外,不要因?yàn)閏har 類型大小為1 個(gè)byte 就省略sizof(char)這種寫法。這樣只會(huì)使你的代碼可移植性下降。

四、內(nèi)存越界

內(nèi)存分配成功,且已經(jīng)初始化,但是操作越過(guò)了內(nèi)存的邊界。這種錯(cuò)誤經(jīng)常是由于操作數(shù)組或指針時(shí)出現(xiàn)“多1”或“少1”。比如:

int a[10] = {0};

for (i=0; i《=10; i++)

{

a[i] = i;

}

所以,for 循環(huán)的循環(huán)變量一定要使用半開半閉的區(qū)間,而且如果不是特殊情況,循環(huán)變量盡量從0 開始。

如果出現(xiàn)內(nèi)存越界,不一定在越界的代碼處出現(xiàn)內(nèi)存錯(cuò)誤,可能在下一次或者下幾次使用這個(gè)指針的時(shí)候出現(xiàn)錯(cuò)誤,甚至是下一次或者幾次申請(qǐng)內(nèi)存的時(shí)候出現(xiàn)段錯(cuò)誤。

示例:

這是我排查過(guò)的一個(gè)內(nèi)存段錯(cuò)誤bug,代碼類似如下:

int set_value(char *psz_dst, char *psz_src){ int i_len = 0; if ( !psz_src ) return 0; i_len = strlen( psz_src ); psz_dst = ( char * )malloc( i_len + 1 ); 。.. return 0;}

在malloc的時(shí)候出現(xiàn)段錯(cuò)誤,查看參數(shù)i_len是63,沒問(wèn)題。

以為是系統(tǒng)內(nèi)存耗盡,free發(fā)現(xiàn)系統(tǒng)剩余幾百M(fèi)內(nèi)存。

只好祭出gdb大法。調(diào)試的時(shí)候,運(yùn)行第7行前,p strlen(psz_src),輸出62;

然后到第8行,p strlen(psz_src),竟然是63,怪了!

只能懷疑是psz_src有問(wèn)題。

找到psz_src申請(qǐng)內(nèi)存的地方,果然malloc了61個(gè)字節(jié),然后strcpy了63個(gè)字節(jié),內(nèi)存越界了。

五、內(nèi)存泄漏

內(nèi)存泄漏幾乎是很難避免的,不管是老手還是新手,都存在這個(gè)問(wèn)題。甚至包括windows,Linux 這類軟件,都或多或少有內(nèi)存泄漏。也許對(duì)于一般的應(yīng)用軟件來(lái)說(shuō),這個(gè)問(wèn)題似乎不是那么突出,重啟一下也不會(huì)造成太大損失。但是如果你開發(fā)的是嵌入式系統(tǒng)軟件呢?比如汽車制動(dòng)系統(tǒng),心臟起搏器等對(duì)安全要求非常高的系統(tǒng)。你總不能讓心臟起搏器重啟吧,人家閻王老爺是非常好客的。

會(huì)產(chǎn)生泄漏的內(nèi)存就是堆上的內(nèi)存(這里不討論資源或句柄等泄漏情況),也就是說(shuō)由malloc 系列函數(shù)或new 操作符分配的內(nèi)存。如果用完之后沒有及時(shí)free 或delete,這塊內(nèi)存就無(wú)法釋放,直到整個(gè)程序終止。

1、告老還鄉(xiāng)求良田

怎么去理解這個(gè)內(nèi)存分配和釋放過(guò)程呢?先看下面這段對(duì)話:

萬(wàn)歲爺:愛卿,你為朕立下了汗馬功勞,想要何賞賜啊?

某功臣:萬(wàn)歲,黃金白銀,臣視之如糞土。臣年歲已老,欲告老還鄉(xiāng)。臣乞良田千畝以蔭后世,別無(wú)他求。

萬(wàn)歲爺:愛卿,你勞苦功高,卻僅要如此小賞,朕今天就如你所愿。戶部劉侍郎,查看湖廣一帶是否還有千畝上等良田未曾封賞。

劉侍郎:長(zhǎng)沙尚有五萬(wàn)余畝上等良田未曾封賞。

萬(wàn)歲爺:在長(zhǎng)沙撥良田千畝封賞愛卿。愛卿,良田千畝,你欲何用啊?

某功臣:謝萬(wàn)歲。長(zhǎng)沙一帶,適合種水稻,臣想用來(lái)種水稻。種水稻需要把田分為一畝一塊,方便耕種。

。。。。

2、如何使用malloc 函數(shù)

不要莫名其妙,其實(shí)上面這段小小的對(duì)話,就是malloc 的使用過(guò)程。malloc 是一個(gè)函數(shù),專門用來(lái)從堆上分配內(nèi)存。使用malloc 函數(shù)需要幾個(gè)要求:

內(nèi)存分配給誰(shuí)?這里是把良田分配給某功臣。

分配多大內(nèi)存?這里是分配一千畝。

是否還有足夠內(nèi)存分配?這里是還有足夠良田分配。

內(nèi)存的將用來(lái)存儲(chǔ)什么格式的數(shù)據(jù),即內(nèi)存用來(lái)做什么?

這里是用來(lái)種水稻,需要把田分成一畝一塊。分配好的內(nèi)存在哪里?這里是在長(zhǎng)沙。

如果這五點(diǎn)都確定,那內(nèi)存就能分配。下面先看malloc 函數(shù)的原型:

(void *)malloc(int size)

malloc 函數(shù)的返回值是一個(gè)void 類型的指針,參數(shù)為int 類型數(shù)據(jù),即申請(qǐng)分配的內(nèi)存大小,單位是byte。內(nèi)存分配成功之后,malloc 函數(shù)返回這塊內(nèi)存的首地址。你需要一個(gè)指針來(lái)接收這個(gè)地址。但是由于函數(shù)的返回值是void *類型的,所以必須強(qiáng)制轉(zhuǎn)換成你所接收的類型。也就是說(shuō),這塊內(nèi)存將要用來(lái)存儲(chǔ)什么類型的數(shù)據(jù)。比如:

char *p = (char *)malloc(100);

在堆上分配了100 個(gè)字節(jié)內(nèi)存,返回這塊內(nèi)存的首地址,把地址強(qiáng)制轉(zhuǎn)換成char *類型后賦給char *類型的指針變量p。同時(shí)告訴我們這塊內(nèi)存將用來(lái)存儲(chǔ)char 類型的數(shù)據(jù)。也就是說(shuō)你只能通過(guò)指針變量p 來(lái)操作這塊內(nèi)存。這塊內(nèi)存本身并沒有名字,對(duì)它的訪問(wèn)是匿名訪問(wèn)。

上面就是使用malloc 函數(shù)成功分配一塊內(nèi)存的過(guò)程。但是,每次你都能分配成功嗎?

不一定。上面的對(duì)話,皇帝讓戶部侍郎查詢是否還有足夠的良田未被分配出去。使用malloc函數(shù)同樣要注意這點(diǎn):如果所申請(qǐng)的內(nèi)存塊大于目前堆上剩余內(nèi)存塊(整塊),則內(nèi)存分配會(huì)失敗,函數(shù)返回NULL。注意這里說(shuō)的“堆上剩余內(nèi)存塊”不是所有剩余內(nèi)存塊之和,因?yàn)閙alloc 函數(shù)申請(qǐng)的是連續(xù)的一塊內(nèi)存。

既然malloc 函數(shù)申請(qǐng)內(nèi)存有不成功的可能,那我們?cè)谑褂弥赶蜻@塊內(nèi)存的指針時(shí),必須用if(NULL != p)語(yǔ)句來(lái)驗(yàn)證內(nèi)存確實(shí)分配成功了。

3、用malloc 函數(shù)申請(qǐng)0 字節(jié)內(nèi)存

另外還有一個(gè)問(wèn)題:用malloc 函數(shù)申請(qǐng)0 字節(jié)內(nèi)存會(huì)返回NULL 指針嗎?

可以測(cè)試一下,也可以去查找關(guān)于malloc 函數(shù)的說(shuō)明文檔。申請(qǐng)0 字節(jié)內(nèi)存,函數(shù)并不返回NULL,而是返回一個(gè)正常的內(nèi)存地址。但是你卻無(wú)法使用這塊大小為0 的內(nèi)存。這好尺子上的某個(gè)刻度,刻度本身并沒有長(zhǎng)度,只有某兩個(gè)刻度一起才能量出長(zhǎng)度。對(duì)于這一點(diǎn)一定要小心,因?yàn)檫@時(shí)候if(NULL != p)語(yǔ)句校驗(yàn)將不起作用。

4、內(nèi)存釋放

既然有分配,那就必須有釋放。不然的話,有限的內(nèi)存總會(huì)用光,而沒有釋放的內(nèi)存卻在空閑。與malloc 對(duì)應(yīng)的就是free 函數(shù)了。free 函數(shù)只有一個(gè)參數(shù),就是所要釋放的內(nèi)存塊的首地址。比如上例:

free(p);

free 函數(shù)看上去挺狠的,但它到底作了什么呢?其實(shí)它就做了一件事:斬?cái)嘀羔樧兞颗c這塊內(nèi)存的關(guān)系。比如上面的例子,我們可以說(shuō)malloc 函數(shù)分配的內(nèi)存塊是屬于p 的,因?yàn)槲覀儗?duì)這塊內(nèi)存的訪問(wèn)都需要通過(guò)p 來(lái)進(jìn)行。free 函數(shù)就是把這塊內(nèi)存和p 之間的所有關(guān)系斬?cái)唷拇藀 和那塊內(nèi)存之間再無(wú)瓜葛。至于指針變量p 本身保存的地址并沒有改變,但是它對(duì)這個(gè)地址處的那塊內(nèi)存卻已經(jīng)沒有所有權(quán)了。那塊被釋放的內(nèi)存里面保存的值也沒有改變,只是再也沒有辦法使用了。

這就是free 函數(shù)的功能。按照上面的分析,如果對(duì)p 連續(xù)兩次以上使用free 函數(shù),肯定會(huì)發(fā)生錯(cuò)誤。因?yàn)榈谝皇褂胒ree 函數(shù)時(shí),p 所屬的內(nèi)存已經(jīng)被釋放,第二次使用時(shí)已經(jīng)無(wú)內(nèi)存可釋放了。關(guān)于這點(diǎn),我上課時(shí)讓學(xué)生記住的是:一定要一夫一妻制,不然肯定出錯(cuò)。

malloc 兩次只free 一次會(huì)內(nèi)存泄漏;malloc 一次free 兩次肯定會(huì)出錯(cuò)。也就是說(shuō),在程序中malloc 的使用次數(shù)一定要和free 相等,否則必有錯(cuò)誤。這種錯(cuò)誤主要發(fā)生在循環(huán)使用malloc 函數(shù)時(shí),往往把malloc 和free 次數(shù)弄錯(cuò)了。這里留個(gè)練習(xí):

寫兩個(gè)函數(shù),一個(gè)生成鏈表,一個(gè)釋放鏈表。兩個(gè)函數(shù)的參數(shù)都只使用一個(gè)表頭指針。

5、內(nèi)存釋放之后

既然使用free 函數(shù)之后指針變量p 本身保存的地址并沒有改變,那我們就需要重新把p的值變?yōu)镹ULL:

p = NULL;

這個(gè)NULL 就是我們前面所說(shuō)的“栓野狗的鏈子”。如果你不栓起來(lái)遲早會(huì)出問(wèn)題的。比如:

在free(p)之后,你用if(NULL != p)這樣的校驗(yàn)語(yǔ)句還能起作用嗎?例如:

char *p = (char *)malloc(100);

strcpy(p, “hello”);

free(p); /* p 所指的內(nèi)存被釋放,但是p 所指的地址仍然不變*/

if (NULL != p)

{

/* 沒有起到防錯(cuò)作用*/

strcpy(p, “world”); /* 出錯(cuò)*/

}

釋放完塊內(nèi)存之后,沒有把指針置NULL,這個(gè)指針就成為了“野指針”,也有書叫“懸垂指針”。這是很危險(xiǎn)的,而且也是經(jīng)常出錯(cuò)的地方。所以一定要記住一條:free 完之后,一定要給指針置NULL。

同時(shí)留一個(gè)問(wèn)題:對(duì)NULL 指針連續(xù)free 多次會(huì)出錯(cuò)嗎?為什么?如果讓你來(lái)設(shè)計(jì)free函數(shù),你會(huì)怎么處理這個(gè)問(wèn)題?

六、內(nèi)存已經(jīng)被釋放了,但是繼續(xù)通過(guò)指針來(lái)使用

這里一般有三種情況:

第一種:就是上面所說(shuō)的,free(p)之后,繼續(xù)通過(guò)p 指針來(lái)訪問(wèn)內(nèi)存。解決的辦法就是給p 置NULL。

第二種:函數(shù)返回棧內(nèi)存。這是初學(xué)者最容易犯的錯(cuò)誤。比如在函數(shù)內(nèi)部定義了一個(gè)數(shù)組,卻用return 語(yǔ)句返回指向該數(shù)組的指針。解決的辦法就是弄明白棧上變量的生命周期。

第三種:內(nèi)存使用太復(fù)雜,弄不清到底哪塊內(nèi)存被釋放,哪塊沒有被釋放。解決的辦法是重新設(shè)計(jì)程序,改善對(duì)象之間的調(diào)用關(guān)系。

上面詳細(xì)討論了常見的六種錯(cuò)誤及解決對(duì)策,希望讀者仔細(xì)研讀,盡量使自己對(duì)每種錯(cuò)誤發(fā)生的原因及預(yù)防手段爛熟于胸。一定要多練,多調(diào)試代碼,同時(shí)多總結(jié)經(jīng)驗(yàn)。

總結(jié):

C語(yǔ)言內(nèi)存錯(cuò)誤常見原因:

1、沒有為指針?lè)峙鋬?nèi)存;

2、使用指針前,沒有校驗(yàn)指針的有效性。

3、給指針?lè)峙涞膬?nèi)存太小,導(dǎo)致內(nèi)存越界;

4、給指針?lè)峙鋬?nèi)存后,沒有初始化內(nèi)存;

5、沒有釋放申請(qǐng)的內(nèi)存,導(dǎo)致內(nèi)存泄露。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3119

    瀏覽量

    75221
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141502

原文標(biāo)題:常見的C編程段錯(cuò)誤及對(duì)策

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    EXE文件錯(cuò)誤原因

      explorer.exe出現(xiàn)錯(cuò)誤解決辦法應(yīng)用程序錯(cuò)誤內(nèi)存不能為....的解決方法   運(yùn)行某些程序的時(shí)候,有時(shí)會(huì)出現(xiàn)內(nèi)存
    發(fā)表于 08-25 15:14 ?0次下載

    電腦開機(jī)啟動(dòng)時(shí)提示(顯示)NTLDR文件丟失解決辦法原因

    電腦開機(jī)啟動(dòng)時(shí)提示(顯示)NTLDR文件丟失解決辦法原因分析 一、其實(shí)WINDOWS XP這個(gè)NTLDR文件丟失有個(gè)最簡(jiǎn)便的解決辦法
    發(fā)表于 03-10 11:44 ?1.3w次閱讀

    物理內(nèi)存使用率高的原因解決辦法

    主要講解的就是物理內(nèi)存使用率高的原因以及他的解決辦法。導(dǎo)致物理內(nèi)存使用率高有幾種可能,而最常見的則有兩種:一是安裝不好的程序,內(nèi)存被占用太多
    發(fā)表于 05-03 17:14 ?9656次閱讀
    物理<b class='flag-5'>內(nèi)存</b>使用率高的<b class='flag-5'>原因</b>及<b class='flag-5'>解決辦法</b>

    Matlab編程常見錯(cuò)誤解決辦法

    Matlab編程常見錯(cuò)誤解決辦法求人不如求己
    發(fā)表于 03-16 15:58 ?0次下載

    一文知道Zynq平臺(tái)運(yùn)行SDK程序錯(cuò)誤解決辦法

    Zynq平臺(tái)運(yùn)行SDK程序錯(cuò)誤解決辦法,具體的跟隨小編一起來(lái)了解一下。
    的頭像 發(fā)表于 07-14 06:05 ?8555次閱讀

    內(nèi)存讀寫錯(cuò)誤原因分析及解決辦法

    內(nèi)存又稱主存,是CPU能直接尋址的存儲(chǔ)空間,由半導(dǎo)體器件制成。內(nèi)存的特點(diǎn)是存取速率快。內(nèi)存是電腦中的主要部件,它是相對(duì)于外存而言的。平時(shí)我們總會(huì)遇到內(nèi)存讀寫
    發(fā)表于 12-01 17:06 ?7637次閱讀

    音箱沒聲音的原因解決辦法

    本文首先介紹了音箱發(fā)聲的原理,其次闡述了四種音箱沒聲音的原因解決辦法,最后還介紹了電腦音箱沒聲音的原因解決辦法,具體的跟隨小編一起來(lái)了解一下。
    發(fā)表于 05-28 14:33 ?4.4w次閱讀

    KEIL C編譯器中常見的警告與錯(cuò)誤信息的詳細(xì)解決辦法資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是KEIL C編譯器中常見的警告與錯(cuò)誤信息的詳細(xì)解決辦法資料概述。
    發(fā)表于 11-07 17:43 ?14次下載

    內(nèi)存條兼容異常問(wèn)題的原因及其解決辦法

    經(jīng)常使用電腦的朋友都知道,電腦如果出現(xiàn)滴滴聲的 電腦開機(jī) 故障就是內(nèi)存條出現(xiàn)了問(wèn)題。但是如果類似迅雷等軟件突然出現(xiàn)問(wèn)題時(shí),大多數(shù)朋友可能就不會(huì)想到是由于內(nèi)存出現(xiàn)了兼容性的問(wèn)題了。下面,我就向大家介紹一下內(nèi)存條兼容異常問(wèn)題的
    發(fā)表于 06-14 10:53 ?1.2w次閱讀

    IAR編譯時(shí),“Error[Li005]: no definition for“的原因解決辦法

    ??今天移植程序后,編譯時(shí),又有"Error[Li005]: no definition for"的報(bào)錯(cuò),之前也遇到過(guò)也解決了,今天準(zhǔn)備正式記錄一下,這個(gè)錯(cuò)誤出現(xiàn)的原因解決辦法
    發(fā)表于 12-03 15:21 ?17次下載
    IAR編譯時(shí),“Error[Li005]: no definition for“的<b class='flag-5'>原因</b>及<b class='flag-5'>解決辦法</b>

    空氣開關(guān)跳閘常見原因解決辦法和卸下步驟

      在使用空氣開關(guān)中,如果出現(xiàn)跳閘情況,需要首先確定跳閘原因,然后根據(jù)具體原因采取相應(yīng)的解決辦法。如果無(wú)法確定跳閘原因,應(yīng)該及時(shí)停機(jī)檢查,并根據(jù)需要請(qǐng)專業(yè)人員進(jìn)行維修。為了確保電氣設(shè)備
    發(fā)表于 04-08 15:42 ?2.9w次閱讀

    PCBA加工焊點(diǎn)拉尖產(chǎn)生的原因解決辦法

    一站式PCBA智造廠家今天為大家講講什么是PCBA加工焊點(diǎn)拉尖?PCBA加工焊點(diǎn)拉尖產(chǎn)生原因解決辦法。接下來(lái)為大家介紹PCBA加工焊點(diǎn)拉尖產(chǎn)生原因解決辦法
    的頭像 發(fā)表于 05-10 08:56 ?1803次閱讀

    java內(nèi)存溢出的幾種原因解決辦法

    內(nèi)存,但是如果程序中存在內(nèi)存泄漏(Memory Leak)或者使用不當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)等問(wèn)題,仍然有可能導(dǎo)致內(nèi)存溢出。下面將詳細(xì)介紹Java內(nèi)存溢出的幾種
    的頭像 發(fā)表于 11-23 14:44 ?6826次閱讀

    codeblocks環(huán)境錯(cuò)誤解決辦法

    解決辦法。 一、CodeBlocks無(wú)法啟動(dòng) 檢查CodeBlocks是否正確安裝。請(qǐng)確保你下載的版本適用于你的操作系統(tǒng),并且安裝過(guò)程沒有發(fā)生任何錯(cuò)誤。 檢查系統(tǒng)是否缺少所需的運(yùn)行時(shí)庫(kù)。CodeBlocks需要一些額外的庫(kù)來(lái)正常運(yùn)行。你可以嘗試重新安裝CodeBlock
    的頭像 發(fā)表于 11-26 09:37 ?8659次閱讀

    PLC異常工作的原因解決辦法

    PLC(可編程邏輯控制器)異常工作的原因解決辦法
    的頭像 發(fā)表于 02-24 17:27 ?1054次閱讀
    主站蜘蛛池模板: 日本一二区视频 | 4388x17亚洲最大成人网 | 亚洲区 | 丁香视频在线观看播放 | 亚洲成人免费网站 | 亚洲青青草原 | 一区二区三区免费在线 | 国模在线视频一区二区三区 | 欧美一级免费在线观看 | 天天干天天做 | 一级毛片无毒不卡直接观看 | 久久婷婷午色综合夜啪 | 亚洲成a人片在线观看导航 亚洲成a人片在线观看尤物 | 国产小视频在线观看www | www色午夜 | 很狠操 | 51影院在线观看成人免费 | 欧美最猛性xxxx高清 | 天堂影院jav成人天堂免费观看 | 亚洲欧美色一区二区三区 | a男人的天堂久久a毛片 | 天天综合色天天综合色sb | 狠狠色狠狠干 | 天天躁日日躁狠狠躁中文字幕老牛 | 欧美性生交xxxxx久久久 | 殴美aⅴ| 九九久久国产精品大片 | 激情文学综合 | 色婷婷久久综合中文久久蜜桃 | 二十年等一人小说在线观看 | 激情综合网站 | 狠狠狠色丁香婷婷综合激情 | 狠狠躁夜夜躁人人躁婷婷视频 | 全部免费特黄特色大片视频 | 性xxxx欧美 | 综合色中色 | 女人色视频 | 久久亚洲精选 | 五月婷婷激情六月 | 色爱区综合激情五月综合激情 | 久青草国产手机视频免费观看 |