不知道怎么回事,请教。。。。。

lm09 2002-07-15 09:59:11
int *spM,**pM;
spM=new int[3*4];
if(spM==NULL)
return;
pM=new int*[3];
if(pM==NULL)
{
delete []spM;
return;
}
pM[2][2]=4;
delete []spM;
delete []pM;
上面这段代码有问题吗?请解释一下
...全文
45 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊主任 2002-07-15
  • 打赏
  • 举报
回复
再补充一点,刚才没确认,问过公司里的专家后确认了。楼主在删除这个二维指针的时候也有问题,造成了内存泄漏。
对于int **p;......不能用delete[] p来删除,正确步骤如下:
for (i = 0; i < N; i++) //N取决与p = new int* [?]的大小
delete[] p[i];
delete[] p;
只有这样,才能不会造成内存泄漏。
hellwolf 2002-07-15
  • 打赏
  • 举报
回复
同意panda_lin(熊猫)
要初始化
bean820 2002-07-15
  • 打赏
  • 举报
回复
spM=new int[3*4];
这里的3*4是什么意思,是不是分配的空间的大小呢?
熊主任 2002-07-15
  • 打赏
  • 举报
回复
pm = new int *[3]就等于告诉系统我pm[i]都是指向int类型的指针了,然后
pm[i] = new int[??]就是给他分配空间了。赋值是给PM[i][j]的,关地址什么事?
熊主任 2002-07-15
  • 打赏
  • 举报
回复
楼上的,PM[]他已经那个初始化了啊,看到这句没:PM = new int* [3]
cxjddd 2002-07-15
  • 打赏
  • 举报
回复
pM是一个二级指针啊,用[][]是不是不行啊?
pM[]是什么呢?是一个一级指针。那么,pM[][]就是一个int了。好象可以啊。
不过,如panda_lin,你应该给pM[]赋值。
sunx007 2002-07-15
  • 打赏
  • 举报
回复
当然有问题了,你的pM = new int*[3];这是什么操作,是二维数组吧,如果你要这样定义二维数组,你应该把pM声明为int *pM;
qhgary 2002-07-15
  • 打赏
  • 举报
回复
pM[2][2]=4有问题,你使用了没有申请的空间。要知道pM=new int*[3]只是申请了3个保存指针的空间,你要pM[0]=new int;pM[1]=new int;pM[2]=new int一下,明白了吧。记得给分哦:)
qhgary 2002-07-15
  • 打赏
  • 举报
回复
有问题,pM[2][2]=4有问题,你并没有申请空间就使用了不该使用的内存。
因为pM=new int*[3]只是开了3个保存指针的空间,如果你要象二维数组一样使用必须还要分别pM[0]=new int;pM[1]=new int;pM[2]=new int;记得给分哦:)
dingkl 2002-07-15
  • 打赏
  • 举报
回复
pM[2][2]没有分配;
即pM[2]没有初始化;应pM[2] = new int [n];然后才能使用
熊主任 2002-07-15
  • 打赏
  • 举报
回复
我差不多猜到你的意思了。你用pm = new int *[3]是想分配一个二维数组,但是少了一部,应该再加两句:
for (int i = 0; i < 3; i++)
{
pm[i] = new int[??]; //??表示你要多少有多少。
}
还有不明白的地方看看谭老师的C语言教程,里面也有具体例子的。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧