入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

delete常见错误总结

创建时间:2018-03-25 投稿人: 浏览次数:474

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。