delete常见错误总结
1、动态分配内存后释放了一次,再次释放
①直接对同一个指针连续delete两次#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int main(void)
{
int* arr = new int[10];
delete[]arr;
delete[]arr;
system("pause");
return 0;
}
②两个指针指向同一块内存,分别delete这两个指针#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int main(void)
{
int* arr = new int[10];
int* arr2 = arr;
delete[]arr;
delete[]arr2;
system("pause");
return 0;
}
2、delete掉的是一个普通指针或者不是一个指针
①delete掉的是一个普通指针#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int main(void)
{
int a = 10;
int* p = &a;
delete p;
system("pause");
return 0;
}
②delete非指针#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int main(void)
{
string ss = "hello";
delete ss;
system("pause");
return 0;
}
3、删除了由系统释放的指针#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int main(void)
{
int* p = NULL;
int arr[50];
p = arr;
delete[] p;
system("pause");
return 0;
}
4、删除动态分配的指针的时候没有指向最初的地址#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int main(void)
{
int* p = new int[4];
p++;
delete[] p;
system("pause");
return 0;
}
最后,来一张崩溃的BUG神图:
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: 二维数组下标的含义
