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記憶體洩漏和溢位問題記憶體
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- JavaScript之記憶體溢位和記憶體洩漏JavaScript記憶體溢位
- C/C++記憶體洩漏及檢測C++記憶體
- 尾遞迴 - 杜絕記憶體洩漏溢位爆棧遞迴記憶體
- 記憶體洩漏與記憶體溢位神比較記憶體溢位
- [Java基礎]記憶體洩漏和記憶體溢位Java記憶體溢位
- 【轉】java中的記憶體溢位和記憶體洩漏Java記憶體溢位
- java記憶體溢位和記憶體洩漏的區別Java記憶體溢位
- 深入淺出JVM(十四)之記憶體溢位、洩漏與引用JVM記憶體溢位
- C++ 程式記憶體洩漏檢測方法C++記憶體
- 來了解一下記憶體溢位和記憶體洩漏記憶體溢位
- Android記憶體溢位、記憶體洩漏常見案例分析及最佳實踐總結Android記憶體溢位
- JavaScript閉包(記憶體洩漏、溢位以及記憶體回收),超直白解析JavaScript記憶體
- c++ 虛解構函式[避免記憶體洩漏]C++函式記憶體
- C++ Builder 5 和 6中VCL的一個記憶體洩漏 BUG (轉)C++UI記憶體
- C/C++應用程式記憶體洩漏檢查統計方案C++記憶體
- 簡單的記憶體“洩露”和“溢位”記憶體
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- 分析記憶體洩漏和goroutine洩漏記憶體Go
- Android 記憶體洩漏總結Android記憶體
- 使用Microsoft Visual C++來檢測和隔離記憶體洩漏 (轉)ROSC++記憶體
- 記憶體溢位:native溢位 和 上層溢位記憶體溢位
- Visual C++ 2010 啟動記憶體洩漏檢測功能,VLD 記憶體洩漏檢查 都超簡單(2)C++記憶體
- 【獵頭】多個Java/C++職位----上海JavaC++
- 嵌入式學習資源——突破C++的虛擬指標-C++程式的緩衝區溢位攻擊C++指標
- 納尼,Java 存在記憶體洩洩洩洩洩洩漏嗎?Java記憶體
- C++灰灰的日常查漏補缺C++
- 阿里大佬講解Java記憶體溢位示例(堆溢位、棧溢位)阿里Java記憶體溢位
- C++位運算子C++
- C++記憶體洩露檢查的5個方法C++記憶體洩露
- 01-0006 C++記憶體訪問越界 [問題整理]C++記憶體
- Android常見記憶體洩漏總結Android記憶體
- 全面總結Android記憶體洩漏(下)Android記憶體
- Handler洩漏處理
- 記憶體洩漏記憶體