释放栈上的指针
#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 !