c/c++ 溢位、越界、洩漏個人小結
轉載:
https://blog.csdn.net/wangkui1331/article/details/80475941
1.溢位
c/c++溢位是指進行拷貝操作時接收的buf小於原buf產生的現象,分為棧溢位和記憶體溢位
1)棧溢位
a.棧溢位是指函式中的區域性變數造成的溢位(注:函式中形參和函式中的區域性變數存放在棧上)
棧的大小通常是1M-2M,所以棧溢位包含兩種情況,一是分配的的大小超過棧的最大值,二是分配的大小沒有超過最大值,但是接收的buf比原buf小
例子1:(分配的的大小超過棧的最大值)
void
{
char a[99999999999999999];
}
例子2:(接收的buf比原buf小)
void
{
char a[10] = {0};
strcpy(a, "abjjijjlljiojohihiihiiiiiiiiiiiiiiiiiiiiiiiiii");
}
注意:除錯時棧溢位的異常要在函式呼叫結束後才會檢測到,因為棧是在函式結束時才會開始進行出棧操作
如:
int main(int argc, char* argv[])
{
char a[10] = {0};
strcpy(a, "abjjijjlljiojohihiihiiiiiiiiiiiiiiiiiiiiiiiiii");
exit(0);
return 0;
}
這種情況是檢測不到棧溢位的,因為函式還沒執行完就退出了
void fun()
{
char a[10] = {0};
strcpy(a, "abjjijjlljiojohihiihiiiiiiiiiiiiiiiiiiiiiiiiii");
}
int main(int argc, char* argv[])
{
fun();
exit(0);
return 0;
}
這種情況呼叫完fun函式就會檢測到異常了
b.棧溢位的解決辦法
如果是超過棧的大小時,那就直接換成用堆;如果是不超過棧大小但是分配值小的,就增大分配的大小
2)記憶體溢位
使用malloc和new分配的記憶體,在拷貝時接收buf小於原buf時造成的現象
解決:增加分配的大小
2.越界
越界通常指的是陣列越界,如
char a[9]={0};
cout << a[9] << endl;
3.洩漏
這裡洩漏通常是指記憶體洩漏,是指使用malloc和new分配的記憶體沒有釋放造成的
相關文章
- Java棧溢位|記憶體洩漏|記憶體溢位Java記憶體溢位
- BufferedImage記憶體洩漏和溢位問題記憶體
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- JavaScript之記憶體溢位和記憶體洩漏JavaScript記憶體溢位
- 尾遞迴 - 杜絕記憶體洩漏溢位爆棧遞迴記憶體
- [Java基礎]記憶體洩漏和記憶體溢位Java記憶體溢位
- java記憶體溢位和記憶體洩漏的區別Java記憶體溢位
- 深入淺出JVM(十四)之記憶體溢位、洩漏與引用JVM記憶體溢位
- Android記憶體溢位、記憶體洩漏常見案例分析及最佳實踐總結Android記憶體溢位
- JavaScript閉包(記憶體洩漏、溢位以及記憶體回收),超直白解析JavaScript記憶體
- C/C++應用程式記憶體洩漏檢查統計方案C++記憶體
- 繼承、抽象個人小結繼承抽象
- 簡單的記憶體“洩露”和“溢位”記憶體
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- vue個人小專案總結Vue
- 分析記憶體洩漏和goroutine洩漏記憶體Go
- 記錄一次Halcon C++ ReadShapeModel 反覆呼叫時記憶體洩漏問題C++記憶體
- 溢位、上溢、下溢
- 嵌入式學習資源——突破C++的虛擬指標-C++程式的緩衝區溢位攻擊C++指標
- 01-0006 C++記憶體訪問越界 [問題整理]C++記憶體
- C++灰灰的日常查漏補缺C++
- Android常見記憶體洩漏總結Android記憶體
- go timer 洩漏Go
- C++ Primer 查漏補缺 —— C++ 中的各種初始化C++
- 阿里大佬講解Java記憶體溢位示例(堆溢位、棧溢位)阿里Java記憶體溢位
- 從預設解構函式學習c++,new,delete,記憶體洩漏,野指標函式C++delete記憶體指標
- C語言中陣列溢位是什麼C語言陣列
- 1161:轉進位制(C C++)C++
- 【C++】 C++知識點總結C++
- 納尼,Java 存在記憶體洩洩洩洩洩洩漏嗎?Java記憶體
- Handler洩漏處理
- 關於 Flask Web 開發的個人小結FlaskWeb
- 【打醬油】2018強網杯個人小結
- 解決記憶體洩漏(1)-ApacheKylin InternalThreadLocalMap洩漏問題分析記憶體Apachethread
- 溢位 省略號 …
- StackOverFlowError(棧溢位)Error
- 整數溢位