2 ninying NinYing 于 2017.09.09 10:39 提问

静态指针动态申请内存

静态指针动态申请内存,定义指针时申请了内存,然后每次满足条件时会释放内存再重新分配内存,但是由于不知道何时会是最后一次重新分配,因此最后一次使用后没有释放内存。请问这样会造成内存泄漏吗?
代码示例如下:

 void foo(int var){
     static int var_save = var;
     static T* ptr = new T;
     if (var_save!=var){
        delete ptr;
        var_save = var;
        ptr = new T;
     }
 }
 int main ( int argc, char* argv[]){
    //......
    while(1){
        //......
        foo(var);
        //......
    }
    return 0;
 }

3个回答

qq_28249373
qq_28249373   2017.09.09 11:10
已采纳

如果内存被释放了,你再引用就会报错。如果动态的分配的内存不去人工释放,那么这个内存会在程序结束的时候被系统回收。由于动态分配的内存在堆区,所以
可用的空间很大,一般不会因为空间不够而出现内存泄漏。当然,如果你动态分配的空间很大,比如说500M,或者分配了很多动态内存,那么不手动释放的话,就有可能造成内存泄漏。你要根据动态分配的空间大小,决定是否一定要手动释放内存。

NinYing
NinYing 谢谢前辈指点!
2 个月之前 回复
qq_28249373
qq_28249373   2017.09.09 11:11

如果内存被释放了,你再引用就会报错。如果动态的分配的内存不去人工释放,那么这个内存会在程序结束的时候被系统回收。由于动态分配的内存在堆区,所以
可用的空间很大,一般不会因为空间不够而出现内存泄漏。当然,如果你动态分配的空间很大,比如说500M,或者分配了很多动态内存,那么不手动释放的话,就有可能造成内存泄漏。你要根据动态分配的空间大小,决定是否一定要手动释放内存。

what951006
what951006   Rxr 2017.09.09 11:21

假如var_save==var,你这不就内存泄漏了,给你一种不泄漏的参考,最多只有一份在堆区

void foo(int var){
static T* ptr = NULL;
if(ptr)
delete ptr;
ptr=new T;
}

NinYing
NinYing 先谢谢前辈指点!当var_save==var时,ptr没有delete也没有new呀。我希望在满足一定条件的时候(var_save==var),对T*指向的内存继续操作,并不重新分配;在不满足条件的时候,释放T*重新分配。所以您的参考不适用啊。不过还是谢谢前辈给的参考!
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片