为什么这个C++程序编译没错,但运行结果不对呢

要求输入一个三维数组计算和并输出最大和最小#include<iostream.h>voidmain(){int***p;inti,j,z,m,n,l,k,y,g,sum;... 要求输入一个三维数组计算和并输出最大和最小
#include<iostream.h>void main()
{
int ***p;
int i,j,z,m,n,l,k,y,g,sum;
p=new int**[5];
for(i=0;i<5;i++)
{
p[i]=new int*[6];
for(j=0;j<6;j++)
p[i][j]=new int[7];

} for(i=0;i<3;i++)
for(j=0;i<3;j++)
for(z=0;z<3;z++)
{
cin>>p[i][j][z];
sum=sum+p[i][j][z];
}
for(i=0;i<3;i++)
for(j=0;i<3;j++)
for(z=0;z<3;z++)
{
if(p[i][j][z]>p[i+1][j+1][z+1])
{
m=i;
n=j;
l=z;
}
if(p[i][j][z]<p[i+1][j+1][z+1])
{
k=i;
y=j;
g=z;
}
}
cout<<"sum="<<sum<<endl;
cout<<"max="<<p[m][n][l]<<"min="<<p[k][y][g];
delete p;
}
展开
 我来答
carea
2013-03-03 · TA获得超过459个赞
知道小有建树答主
回答量:395
采纳率:65%
帮助的人:103万
展开全部
你要学会自己测试,这么多行的程序,别人看起来也很费劲。
自己测试的思路基本是由少到多,步步为营:你把后面的程序注释起来,先运行前面的,没有问题了再增加一行或者几行,这样一般可以确定在哪一条语句执行的时候出现了问题。
另外,你可以将输入数据缩小,比如数组的元素刚开始设置成一个或者两个,执行以下看看。
当你确定哪里出了问题之后,你可以使用debug模式,先设置断点,然后调试执行,这样基本可以解决绝大多数的问题。关于如何调试,是一个重要的必备技术。基本的调试方法也比较好操作,大多数编程语言书上都有,你自己去模仿着走一遍,以后就知道了。很容易的,希望对你有帮助
zhang123_028
2013-03-03 · TA获得超过192个赞
知道小有建树答主
回答量:151
采纳率:100%
帮助的人:35.5万
展开全部
做任务,刷分,我实在受不了你们直接贴代码让别人找错误了,没有格式,没有错误原因,还得打开编译器复制过去,而且程序目的不知道,看到头一头雾水。
我没有编译器尝试就看了一下。你这是求最大最小值?
首先你三围数组生成的维数是3 4 5 复制的却都是 3 3 3 编程风格不好。
第二你for循环的时候不加大括号只有最后一个for有(不知道对不对)看起来很混乱
第三注意最后一组循环里面的比较,如果i=2了,这时候就是if(p[2][j][z]>p[3][j][z])很明显数组越界了逻辑混乱
最后看最后一句delete,如果我没有记错你这种情况应该是三层four循环挨个delete吧,并且声明的时候用了 new[] 那么delete的时候也应该 delete[] 如果你这种写法不仅不能真正的释放内存(当然程序一眨眼就结束了,内存也就释放了)而且会有运行错误。
更多追问追答
追问
虽然很感谢你指出错误但是看我的很恼火、我是C++新手怎么了、昨天才开始看书,能提出这种弱智问题的不用想都知道在这方面没有经验好不好。我就爱直接贴代码让人找错误怎么了。你爱答不答管我什么事。看着不爽不答不就行了何必说这样的话。一大早上心情被你破坏完了!
追答
木有怎么 ,有句话叫忠言逆耳,这都让你生气了,你还是别学了,如果你只是简单地为了应付考试,当我没说,确实应该以这种方法学习,谁都有新手时期,我新手的时候问题从来不会整个体味,我会直接把编译器检测到的错误原因复制下来粘贴到百度,然后去看,你会发现这种错误不是你一个人很多人已经把这种错误归纳总结好了,你不仅能改正这个错误还能接触到更广的只是,说这话没有盛气凌人的意思,只是希望你不要再在这条路上跑了,只能越跑越黑。就算别人告诉你错误了你改正了能怎么样?你印象绝对不会深。既然知道自己是C++新手就应该找到更有效的方法学习。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式