[問題] 請問為什麼我這樣程式會當掉

作者: 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