版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1:对空指针(NULL)的解应用操作
看代码
void test()
{
int* p = (int*)malloc(50);
*p = 20;
free(p);
}
直接对开辟空间进行判断,少了对这个指针是否为空指针的判断,如果动态申请空间不成功就会将空指针返回,直接对空指针进行操作必然导致错误。
2:动态空间的越界访问
void test()
{
int* p = (int*)malloc(2);
if (*p == NULL)
return;
for (int i = 0; i < 8; i++)
{
printf("%d", p[i]);
}
free(p);
}
这种情况会直接导致程序崩溃
3:对非动态空间内存的free()释放
void test()
{
int a = 10;
int* p = &a;
free(p);
}
4:用free释放动态内存空间的一部分
void test()
{
int* p = (int*)malloc(10);
if (p = NULL)
{
return;
}
for (int i = 0; i < 5; i++)
{
printf("%d", *p++);
}
free(p);
}
释放动态内存的一部分也是错误的
5:对同一块动态内存空间的多次释放
void test()
{
int* p = (int*)malloc(10);
if (p = NULL)
{
return;
}
free(p);
free(p);
}
6:内存泄漏(开辟未释放)
void test()
{
int* p = (int*)malloc(10);
if (p = NULL)
{
return;
}
}
没有free()会导致内存泄漏