色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言內存操作有哪些陷進

Q4MP_gh_c472c21 ? 來源:搜狐網 ? 作者:搜狐網 ? 2020-09-22 14:45 ? 次閱讀

1、返回局部變量的地址,或者返回指向局部變量的指針

int *stackref()

{

int val;

return &val;

}

2、引用已經被釋放了的堆內存(野指針)

int * heapref(int n, int m)

{

int i;

int *x, *y;

x = (int *)malloc(n * sizeof(int));

/* 各種操作 */

free(x);

x = NULL;

y = (int *)malloc(m * sizeof(int));

for(i = 0; i 《 m; i++) {

y[i] = x[i]++; // 此處的x之前已經被釋放了!

}

}

3、內存泄漏

malloc和free沒有配套使用

void leak(int n)

{

int *x = (int *)malloc(n * sizeof(int));

return;

}

或者:

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

p = (char *)malloc(10);

結構體資源釋放常見內存泄漏問題

struct a{

int buf_size;

char *buf;

};

struct a *p = (struct *a)malloc(sizeof(struct a));

忘記給成員buf分配空間就使用

釋放的時候,忘記釋放buf

先釋放了p,再釋放buf

free(p);

free(p-》buf);

多步驟內存初始化

char *buf1;

char *buf2;

int module_init()

{

buf1 = (char *)malloc(100);

if(buf1 == NULL)

return -1;

buf2 = (char *)malloc(100);

if(buf2 == NULL)

return -1;//執行到這里,buf1內存泄漏

free(buf2);

free(buf1);

。..

}

解決對策是對出錯處理修改成goto語句,而非直接return。

調用了會分配內存的函數,使用完未做內存回收處理。

實際開發最常見,常常是調用會分配內存的第三方函數庫。

char *func ( )

{

return (char *)malloc(20); // make sure to memset this location to ‘’…

}

void callingFunc ( )

{

char * p = func ( ); // Problem lies here

。..

}

4、棧越界

{

char buf[5];

sprintf(buf, “%s”, “hello world”);

}

上面的代碼導致棧緩沖區溢出,安全的做法是:

1)根據需求定義合適的buffer;

2)采用snprintf(buf, sizeof(buf), “%s”, “hello world”)來及時截斷。

5、誤認為從堆分配的內存被初始化為0

int *p = malloc(24 * sizeof(int));

char a[] = “abcdefghiafa”;

int i = 0;

while(a[i] != ‘’)

{

i++;

p[*a - ‘a’]++;

}

6、引用未初始化的指針,或者訪問NULL指針

int *p;

int a = *p;

7、間接訪問無效地址,類似于引用未初始化的指針

如從stdin讀取一個int變量時,scanf(“%d”, &val);是正確用法,若誤寫為scanf(“%d”, val);時,val的值會被解釋為一個地址,并試圖向該地址寫數據。在最好的情況下,進程立即異常中止。在最壞的情況下,val的值恰好對應于虛擬存儲器的某個合法的具有讀/寫權限的內存區域,于是該內存單元會被改寫,而這通常會在相當長的一段時間后造成災難性的、令人困惑的后果。

8、堆越界

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

char *q = (char *)malloc(10);

char a[20] = “abcdefghijklmno”

memcpy(p,a,sizeof(a));//可能無意中修改了q指針指向的堆數據

9、謹慎使用strcpy,memcpy等拷貝函數,字符串數組賦值之前或者定義之后最好memset一下

char p[10];

strcpy(p,“hello world!”);//數組越界

strncpy(p,“hello world!”,sizeof(p));//不越界,但是少了結尾‘’

memset(p,‘’,sizeof(p));

strncpy(p,“hello world!”,sizeof(p) - 1);//正確

10、使用未初始化的內存

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

char a[10] = “abcd”;

strcpy(a,p);//結果未知

11、當使用malloc來申請內存時,應該用if(p != NULL)進行防錯檢查。

12、意圖通過傳遞指針來分配內存

void *GetMemory(void *p,int n)

{

p = malloc(n);

return p;

}

char *p;

GetMemory((void *)p,10);

*p = ‘a’;

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137427

原文標題:C語言內存操作的陷阱!你踩過坑嗎?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于C語言結構體內存對齊

    今天給大家帶來一道經典、易錯的關于C語言結構體內存對齊的題目:
    的頭像 發表于 04-14 12:51 ?6901次閱讀

    關于C語言結構體內存對齊

    今天給大家帶來一道經典、易錯的關于C語言結構體內存對齊的題目。
    發表于 09-08 11:54 ?499次閱讀

    一文詳解C語言內存管理

    C語言內存管理指對系統內存的分配、創建、使用這一系列操作
    發表于 07-26 16:04 ?725次閱讀
    一文詳解<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>內存</b>管理

    小數在內存中是如何存儲的?為什么C語言中的浮點數不支持位移操作

    小數在內存中是如何存儲的?為什么C語言中的浮點數不支持位移操作
    發表于 08-16 09:24 ?1096次閱讀
    小數在<b class='flag-5'>內存</b>中是如何存儲的?為什么<b class='flag-5'>C</b><b class='flag-5'>語言</b>中的浮點數不支持位移<b class='flag-5'>操作</b>?

    C語言中數組和結構體的內存表示和布局

    C語言中,數組和結構體都可以代表一塊內存,但為什么結構體可以直接賦值,而數組不可以?這個問題涉及到C語言的設計哲學、語法規則以及
    發表于 08-28 10:54 ?1711次閱讀

    C語言中的動態內存管理知識

    概述:C語言的優勢是可以直接訪問內存地址,也就是指針操作,但其缺陷也是因為直接內存訪問。如何通過防御性編程提前發現問題,盡可能減少
    發表于 09-22 09:54 ?573次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中的動態<b class='flag-5'>內存</b>管理知識

    C語言的底層操作

    原因,那就是C語言對底層操作做了很多的的支持,提供了很多比較底層的功能。   下面結合問題分別進行闡述。   問題:移位操作   在運用移位操作
    發表于 04-23 11:56

    C語言教程之獲取BIOS常規內存容量

    C語言教程之獲取BIOS常規內存容量,很好的C語言資料,快來學習吧。
    發表于 04-25 16:43 ?0次下載

    C語言的sizeof操作符基礎和經典問題

    C語言中,sizeof是一個操作符(operator),而不是函數!其用于判斷數據類型或者表達式長度(所占的內存字節數)。其兩種表達形式
    的頭像 發表于 04-04 17:39 ?2725次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的sizeof<b class='flag-5'>操作</b>符基礎和經典問題

    單片機C語言C語言為什么差異?

    許多小伙伴在學完C語言后想入門單片機,但學著學著發現明明都是C語言,為什么單片機C語言和我當初學
    發表于 09-01 16:39 ?3814次閱讀

    不同環境下C語言操作

    目錄一.C語言知識回顧篇二.不同環境下運行C語言代碼一.C語言知識回顧篇1.
    發表于 01-13 15:30 ?2次下載
    不同環境下<b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>操作</b>

    C語言內存問題如何解決

    大家好,我是雜燴君。 C 語言內存問題,難在于定位,定位到了就好解決了。 這篇筆記我們來聊聊踩內存。踩內存,通過字面理解即可。本來是
    的頭像 發表于 06-22 11:37 ?478次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>內存</b>問題如何解決

    聊聊嵌入式C語言內存的問題

    C 語言內存問題,難在于定位,定位到了就好解決了。
    發表于 06-25 08:59 ?1705次閱讀
    聊聊嵌入式<b class='flag-5'>C</b><b class='flag-5'>語言</b>踩<b class='flag-5'>內存</b>的問題

    嵌入式C語言高手煉成之內存操作

    在嵌入式系統的編程中,常常要求在特定的內存單元讀寫內容,匯編對應的MOV指令,而除C/C++以外的其它編程語言基本沒有直接訪問絕對地址的能
    的頭像 發表于 12-11 17:20 ?530次閱讀

    C語言內存泄漏問題原理

    內存泄漏問題只有在使用堆內存的時候才會出現,棧內存不存在內存泄漏問題,因為棧內存會自動分配和釋放。C
    發表于 03-19 11:38 ?567次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>內存</b>泄漏問題原理
    主站蜘蛛池模板: 背着老婆爆操性感小姨子 | 成人免费视频在线播放 | 99热这里只有的精品 | 一级做a爰片久久毛片苍井优 | qvod伦理片| 国产午夜精品美女免费大片 | 岛国片免费在线观看 | 精品国产免费人成视频 | 青青草A在在观免费线观看 青青草AV国产精品 青青草 久久久 | 欧美18精品久久久无码午夜福利 | 嫩草伊人久久精品少妇AV网站 | 日日噜噜夜夜狠狠扒开双腿 | 青柠在线观看视频在线高清 | 黄色三级网站在线观看 | 一二三四免费中文在线1 | 闺蜜扒开我尿口使劲揉 | 菲律宾毛片 | 俄罗斯粗大猛烈18P 俄罗斯雏妓的BBB孩交 | 午夜视频无码国产在线观看 | 久久香蕉国产线看观看精品 | 色中色辩论区 | 麻豆出品国产AV在线观看 | 国产精品久久久久久人妻香蕉 | adc我们的永久网址 adc网址在线观看 | 欧美亚洲日韩国产在线在线 | 久久久精品免费免费直播 | 久久久久久天天夜夜天天 | 99热这里只有的精品 | 亚洲午夜性春猛交XXXX | 日产精品久久久久久久蜜殿 | 娇妻玩4P被三个男人伺候电影 | 日韩亚洲欧美中文高清在线 | 国产人妻麻豆蜜桃色 | 久久九九有精品国产23百花影院 | YELLOW视频直播在线观看 | 国产手机精品一区二区 | 亚洲综合春色另类久久 | 嫩草国产精品99国产精品 | 中文字幕久久熟女人妻AV免费 | 日日夜夜撸 在线影院 | aaaaaaa一级毛片|