请各位老铁欣赏一下,下面的简短代码:
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(空指针),否则这个指针,就为空指针!!