Ning_Yin
2017-09-09 02:39
采纳率: 100%
浏览 1.6k

静态指针动态申请内存

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

 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条回答 默认 最新

  • shifenglv 2017-09-09 03:10
    已采纳

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

    点赞 评论
  • shifenglv 2017-09-09 03:11

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

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

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

    点赞 评论

相关推荐 更多相似问题