釋放棧上的指針
#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 !