程序如下
typedef strcuct

       char     szMess[100];
       char     szCode[100];
       int      k;
}ST_PACK;ST_PACK *Pack=ST_PACK[100];delete []Pack;
这样DELETE时,内存溢出。
请高手帮忙。

解决方案 »

  1.   

    ST_PACK *Pack=ST_PACK[100];
    这一句成立吗?
      

  2.   

    ST_PACK *Pack=ST_PACK[100];
    这一句成立吗?
      

  3.   

    你是不能这样声明指针变量的,那样是错误的,
    应该
    ST_PACK *Pack = new ST_PACK[100];
    这样用delete就没问题了
      

  4.   

    ST_PACK *Pack= ST_PACK[100];正确,但delete不能删除栈上分配的内存。
    栈上分配的内存是自动释放的,用不着手工去delete
      

  5.   

    去掉:delete []Pack;
    或:
    ST_PACK *Pack = new ST_PACK[100];
    delete[] Pack;
      

  6.   

    不对,不对,我写错了程序如下
    typedef strcuct

           char     szMess[100];
           char     szCode[100];
           int      k;
    }ST_PACK;ST_PACK *Pack= new ST_PACK[100];delete []Pack;
    这样DELETE时,内存溢出。
    请高手帮忙。
      

  7.   

    你的这段代码本身没有什么问题。一般而言,出现你这种情况,通常是你程序中其他的地方有内存的越界访问,把堆给破坏了。堆被破坏了之后,无论是 new 还是 delete 都会出现不可预测的结果。
      

  8.   

    to SoLike(是我) :
    ST_PACK *Pack= ST_PACK[100]; 是错误的。 没有这种语法。这段代码没有泄漏。 你是不是结构体里面不是这几个成员, 是不是有指针, 然后你为这个成员指针分配了内存, 这样的话需要释放成员的指针(可以在析构函数中)。
      

  9.   

    的确如此,我是内存越界了,new出来的变量是不检测[]中的值的,谢谢大家