內存異常實例解析(core dump、segmentation fault)

釋放棧上的指針

#include <iostream>
using namespace std;
int test(){
    int a = 100;
    int *ptr = &a; 
        
    free(ptr); 
}
int main(){
    test();      
    return 0;
}

報錯: invalid pointer。因爲a是局部變量,在棧上,ptr指向棧上的地址&a,即0x7fffffffde0c。
棧是由系統自動管理的,不需要手動釋放,也不同用free去釋放,所以free的時候報無效的指針。

munmap_chunk(): invalid pointer
Aborted (core dumped)

在這裏插入圖片描述

棧越界

#include <iostream>

int main(){

    int b[10] = {0}; //局部變量,10個int空間
    b[10] = 100;     //棧越界

    return 0;
}

申請的數組是局部變量,在棧上。
報錯:stack smashing detected,stack棧崩潰!表現形式也是core dump.
在這裏插入圖片描述

空指針引用

例1:

#include <iostream>

int main(){
    int *ptr = (int *)malloc(10 * sizeof(int) );
    free(ptr);
    ptr = NULL;
    int a = *ptr; //*ptr, 空指針的引用
    return 0;
}

在這裏插入圖片描述
報Segmentation fault,段錯誤!
例2:

#include <iostream>
int main(){  
    int * ptr;
    *ptr = 10; 
    return 0;
}

int * ptr;未指定ptr的指向,gdb跟蹤發現ptr是0;然後 *ptr = 10; 相當於進行的空指針的引用,進而報錯Segmentation fault !
在這裏插入圖片描述
在這裏插入圖片描述

發佈了135 篇原創文章 · 獲贊 312 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章