真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語言:動態(tài)內(nèi)存分配(3)-創(chuàng)新互聯(lián)

常見的動態(tài)內(nèi)存錯(cuò)誤:

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

1、對NULL指針的解引用操作

void test()
{int*p=(int*)malloc(INT_MAX/4);
    *p= 20;//如果p的值是NULL,就會有問題
    free(p);
}

2、對動態(tài)開辟空間的越界訪問

void test()
{int i=0;
    int*p=(int*)malloc(10*sizeof(int));
    if(NULL== p)
    {   exit(EXIT_FAILURE);
    }
    for(i=0;i<=10;i++)
    {   *(p+i)=i;//當(dāng)i是10的時(shí)候越界訪問
    }
    free(p);
}

3、對非動態(tài)開辟內(nèi)存使用free釋放

void test()
{int a=10;
    int *p=&a;
    free(p);//定義的a是棧區(qū)的,不能用free釋放
}

4、使用free釋放一塊動態(tài)開辟內(nèi)存的一部分

void test()
{int*p=(int*)mal1oc(100);
    p++;
    free(p);//p不再指向動態(tài)內(nèi)存的起始位置
}

5、對同一塊動態(tài)內(nèi)存多次釋放

void test()
{int *p= (int*)malloc(100);
    free(p);
    free(p);//重復(fù)釋放
}

6、動態(tài)開辟內(nèi)存忘記釋放(內(nèi)存泄露)

while(1)
{malloc(1);//內(nèi)存不釋放,占的內(nèi)存會越來越大
}

所以切記:動態(tài)開辟的空間一定要釋放,并且正確釋放。

下面有四道關(guān)于動態(tài)內(nèi)存分配錯(cuò)誤的筆試題:
第一題:

void GetMemory(char*p)
{ p=(char*)malloc(100);
}
void Test(void)
{ char*str=NULL;
     GetMemory(str);
     strcpy(str, "hello world') ;
     printf(str);
}
int main()
{ test () ;
}

答:該程序是錯(cuò)誤的。因?yàn)閠est運(yùn)行之后,p申請的內(nèi)存空間其實(shí)并沒有給到str,因此str無法打印出hello world。而且p申請的內(nèi)存并沒有進(jìn)行free操作,造成了內(nèi)存泄漏。

第二題:

char*GetMemory(void)
{  char p[]="hello world";
      return p;
}
void Test(void)
{  char*str=NULL;
      str=GetMemory;
      printf(str);
}
int main()
{  test();
      return 0;
}

答:該程序是有問題的。該題雖然return p了,但是在GetMemory函數(shù)結(jié)束之后,p銷毀了。因此p成為了野指針。

第三題:

void GetMemory(char**p,int num)
{  *p=(char*)malloc(num);
}
void test(void)
{  char*str=NULL;
      GetMemory(&str,100);
      strcpy(str,"hello");
      printf(str);
}
int main()
{  test();
      return 0;
}

答:該程序存在內(nèi)存泄漏問題,沒有free釋放。但是該題可以正常打印出hello,因?yàn)関p接收的是str的地址,因此p申請到內(nèi)存空間時(shí),str就是其首地址。因此可以打印出。

第四題:

void*Test(void)
{char*str=(char*)malloc(100);
    strcpy(str,"hello");
    free(str);
    if(str!=NULL);
    {   strcpy(str,"world");
           printf("str");
    }
}

int main()
{Test();
    return 0;
}

答:該程序free提前釋放了,釋放完后再將world字符拷貝進(jìn)去,可是那塊空間已經(jīng)不屬于str了,造成了非法訪問。結(jié)構(gòu)雖然能打印出world,但是還是有問題存在的。

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


文章題目:C語言:動態(tài)內(nèi)存分配(3)-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/dcsgis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部