注册 登录
编程论坛 VC++/MFC

关于new和delete的问题,求大侠指导

劇終の後 发布于 2011-01-12 11:25, 577 次点击
#include <iostream.h>
#include <stdlib.h>

int **s,**m;
void main()
{
    int i,j,w;
    cin>>w;
    m=new int*[w];
    for(i=1;i<=w;i++)                 
    {
        m[i]=new int[w];
    }
    s=new int*[w];
    for(i=1;i<=w;i++)
    {
        s[i]=new int[w];
    }   
    for(i=1;i<=w;i++)
    {
        delete m[i];
        delete s[i];
    }
    delete []m;
    delete []s;
}

当程序执行到释放m和s的空间时就会出现调试错误,不知道问题所在,请各位高手帮帮忙。
6 回复
#2
yuccn2011-01-12 12:14
#include <iostream.h>
#include <stdlib.h>

int **s,**m;
void main()
{
    int i,w;
    cin>>w;
    m=new int*[w];
    for(i=1;i<=w;i++)                 
    {
        m[i-1]=new int[w];
    }
    s=new int*[w];
    for(i=1;i<=w;i++)
    {
        s[i-1]=new int[w];
    }   
    for(i=1;i<=w;i++)
    {
        delete m[i-1];
        m[i-1] = NULL;
        delete s[i-1];
        s[i-1] = NULL;
    }
    delete []m;
    delete []s;
}
#3
yuccn2011-01-12 12:18
问题多多:
   1,命名不规范,什么m s * 的,看也看不懂
   2,下表问题。m=new int*[w];s[w]=new int[w];这样是违规访问的了。
   3.delete m[i-1]; 并没有吧 m[i-1] 置为NULL。
   4。 如果输入的是 0 或者 -1等值 程序会怎么样?
#4
qq10235692232011-01-12 13:32
#include <iostream.h>
#include <stdlib.h>

int **s,**m;
void main()
{
    int i,j,w;
    cin>>w;
    m=new int*[w];
    for(i=0;i<w;i++)                 
    {
        m[i]=new int[w];
    }
    s=new int*[w];
    for(i=0;i<w;i++)
    {
        s[i]=new int[w];
    }   
    for(i=0;i<w;i++)
    {
        delete m[i];
        delete s[i];
    }
    delete []m;
    delete []s;
}
楼主应该是创建动态二维数组,看看for语句里面的变化,应该是数组下标越界的问题。
#5
lucky5635912011-01-14 08:24
内存泄漏
#6
kofandlizi2011-01-16 00:26
搞错没啊!数组分配就有问题!
#7
dsj2011-04-03 18:43
**s是什么意思啊
1