对于《高质量C/C++编程》,想必这个已经是早已成名的经典书籍了!!在此,笔者借用两三个题目!!
在之前笔者就已经拙作两篇:有兴趣的各位老铁,可以进行欣赏一下啦!!
1.经典的笔试题解析《高质量C/C++编程》
链接为:经典的笔试题解析《高质量C/C++编程》_念君思宁的博客-CSDN博客
2.经典的笔试题解析(返回栈空间地址的问题)
请各位老铁欣赏一下,下面的简短代码:
1.内存泄漏问题忘记free!!
- #include
- #include
- #include
-
- 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
- #include
- #include
-
- 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(空指针),否则这个指针,就为空指针!!