C 野指针,内存泄漏
2022-04-07 本文已影响0人
河马咕嘟
野指针一般是由于一下的原因造成;
1,Int * p; p = 30; (由于指针没有初始化,其随机指向了一块内存,再给其赋值会造成非法访问)
2,int array[] = {1,4,5}; int * p = &array; p+= 4 ;P = 5; (越界访问了内存空间,非法访问)
3,char get(){
char p = (char)malloc(100*sizeof(char));
return &p;
}
int main(int argc, const char * argv[]) {
char *str = NULL;
str = get();
strcpy(str, "hello world");
printf("%s\n",str);
return 0;
}. (栈区的指针变量P已经被释放回收,而外部的str 还存储其指针地址,此时访问即是野指针访问。同时 申请在堆区的 100 * char空间还没有被自动释放,这还会造成内存泄漏。)
总结:
野指针 ——是由于内存被释放,或者随机指向,这时指向这个内存的指针就成了野指针,导致无法访问,非法访问。
内存泄漏——是由于在堆区自动申请了内存空间,指向其的指针变量被释放回收。导致无法管理释放这个内存空间,直至程序结束。一般栈区的存放的是局部变量,存储的指针的变量,函数结束,其就会被系统回收。如果此时你还没有根据栈区的指针区手动的释放堆区内存,后面将无法管理释放。