经典的笔试题解析:内存泄漏问题忘记free与非法访问的问题
【摘要】 经典的笔试题解析:内存泄漏问题忘记free与非法访问的问题
对于《高质量C/C++编程》,想必这个已经是早已成名的经典书籍了!!在此,笔者借用两三个题目!!
在之前笔者就已经拙作两篇:有兴趣的各位老铁,可以进行欣赏一下啦!!
1.经典的笔试题解析《高质量C/C++编程》
链接为:经典的笔试题解析《高质量C/C++编程》_念君思宁的博客-CSDN博客
2.经典的笔试题解析(返回栈空间地址的问题)
请各位老铁欣赏一下,下面的简短代码:
1.内存泄漏问题忘记free!!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void getmemory(char** p, int num)
{
*p = (char*)malloc(num);
}
void test()
{
char* str = NULL;
getmemory(&str, 100);
strcpy(str, "hello world");
printf("%s\n", str);
//忘记释放
}
int main()
{
test();
return 0;
}
上述的代码,并没有多少错误,只不过就是忘记释放掉malloc开辟的空间罢了!!!
不过当运行一个较大的程序的时候,每次都申请空间而不去释放,可能会导致内存不足,从而……卡机!!!所以一定不要忘记释放动态内存开辟的空间!!!
2.非法访问问题!!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void test()
{
char* str = (char*)malloc(100);
strcpy(str, "hello");
free(str); //在这里,已经释放掉str了!!
if (str != NULL)
{
//str此时为野指针!
//在这里进行非法访问!
strcpy(str, "world");
printf("%s\n", str);
}
}
int main()
{
test();
return 0;
}
对于这个代码,在函数没有结束就已经使用:free(str); free完以后,malloc函数开辟的100个字节的空间,已经还给操作系统了,且str指针不会自动置为NULL(空指针)!!故此时,str为野指针!!!在后面进行strcpy(str, "world")拷贝的时候,就会进行非法访问!!
温馨小提示:
free完以后,一定要将指针置为NULL(空指针),否则这个指针,就为空指针!!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)