[问题] 请问为什么我这样程式会当掉

楼主: ga544523 (美丽新世界)   2014-06-08 14:44:22
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
c++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
iostream
问题(Question):
http://truth.bahamut.com.tw/s01/201406/d465beda80ee55634255f10bd8ee87ce.JPG
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
#include <iostream>
using namespace std;
int main(){
int *arr;
int m=0,n=0,y,u,z;
//m=列 n=直
cin>>m>>n;
y=n;
u=n;
z=n;
arr=new int[m*n];
for(int i=0;i<n;i++)
arr[i]=1;
for(int j=0;j<m;j++){
arr[y]=1;
y=y+n;
}
for(int j=1;j<m;j++){
for(int i=1;i<n;i++){
arr[i+u]=arr[i+u-1]+arr[i+u-z];
}u=u+n;}
for(int i=0;i<m*n;i++)
{
cout<<arr[i]<<" ";
if(i!=0&&(i+1)%n==0)
cout<<endl;
}
delete []arr;
return 0;
}
补充说明(Supplement):
如题
把delete[]arr;这行删掉倒是不会当掉
好奇怪喔
作者: diabloevagto (wi)   2014-06-08 15:02:00
你的排版实在太神奇了arr[i+u]=arr[i+u-1]+arr[i+u-z];你这部份有问题
楼主: ga544523 (美丽新世界)   2014-06-08 15:16:00
恩我研究一下
作者: RealJack   2014-06-08 15:31:00
题目说要用new动态分配内存,而非直接宣告成区域变量delete是用在删除动态配置的空间,不是用在事先配置的空间
作者: diabloevagto (wi)   2014-06-08 15:39:00
原po有用new没错啊基本上你那会当掉的原因就是你指标写入到超出范围
作者: Feis (永远睡不着 @@)   2014-06-08 16:04:00
for (int j = 1; j < m; j++) ....
作者: RealJack   2014-06-08 16:14:00
sorry...没看到new...
楼主: ga544523 (美丽新世界)   2014-06-08 16:23:00
第14行照feis大大说的改就可以了..感谢各位
作者: johnpage (johnpage)   2014-06-19 07:57:00
大于64k

Links booklink

Contact Us: admin [ a t ] ucptt.com