指针和引用的区别
- 是否可变:指针所指向的内存空间在程序运行过程中可以改变,而引用一旦绑定,不能改变。
- 是否可以为空:指针可以为空,引用必须绑定对象。
- 是否可以为多级:指针可以有多级,引用不能。
- 是否可作为容器元素:指针可以,引用不能。
- 是否支持算法运算:指针支持,引用不能。
野指针是什么?怎么导致的?怎么避免?
野指针:指向不确定、非法或者已经失效内存的指针。
产生野指针的原因:
- 指针未初始化
// 野指针 int* p;
- 释放之后继续使用
int* p = new int(10);
delete p;
*p = 20;
- 函数返回局部变量地址:局部变量在栈上,函数结束,栈帧销毁,内存失效。
int* foo() {
int x = 10;
return &x;
}
int* p = foo();
cout << *p;
- 指针越界访问:访问非法内存,野指针行为。
int arr[5];
int* p = arr;
p += 10;
*p = 30;


