C语言中的数组的使用——混乱的内存管理
生活随笔
收集整理的這篇文章主要介紹了
C语言中的数组的使用——混乱的内存管理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在C語言中想要創建數組只能自己malloc或者calloc,數組復制則是memcpy。
這樣創建出來的數組在調用時是不會檢測數組邊界的,即你聲明了一個長度為5的數組,卻可以訪問第6個位置……也可以給第7個位置賦值……
不知道這算不算內存泄露,可否通過這種方法偷取內存中的情報呢?
例:
int main(){int *list=(int*)malloc(5*sizeof(int));for(int i=0;i<5;++i){list[i]=i;}for(int i=0;i<15;++i){cout<<list[i]<<endl;}free(list); }我給list分配了5個位置并賦值,但是調用時完全可以無視數組長度限制查看第6個位置甚至第n個位置。
在賦值時如果使用malloc,不刪除原內存數據的話,則會輸出某些“隨機數”,是不是原內存中的數據呢?
memcpy同樣不考慮邊界,我可以把一個長度為20的數組復制給一個長度為5的數組,然后長度為5的數組長度就變成了20了……
例:
int main(){int* list=(int*)malloc(10*sizeof(int));int * list2=(int*)malloc(5*sizeof(int));for(int i=0;i<20;i++){list[i]=i;}memcpy(list2,list,20*sizeof(int));for(int i=0;i<20;++i){cout<<i<<" "<<list2[i]<<endl;}free(list);free(list2); }注意這里list只聲明了長度了為10的內存,但是卻賦了20個值。
list2聲明長度為5,但是同樣復制進了20個值,都沒有報錯可以正常運行。
這樣……聲明內存還有何意義……完全沒有長度的限制啊!那會不會覆蓋掉其它的內存數據?
感覺好混亂啊~
?
轉載于:https://www.cnblogs.com/plwang1990/p/4274096.html
總結
以上是生活随笔為你收集整理的C语言中的数组的使用——混乱的内存管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [注]什么是用户?估计90%人不知道
- 下一篇: 请写一个函数,实现以下功能: 字符串“o