[問題] for 迴圈執行一半程式終止

看板C_and_CPP作者 (小涼)時間10年前 (2013/12/03 20:30), 編輯推噓0(008)
留言8則, 4人參與, 最新討論串1/1
dev c++ 程式run 一半時會停止 我找到發現在一個副程式中的for 迴圈 出問題 在"第二個" for iz=0 程式就停止 測試過 iz 是其他值 就沒事 搞不懂 為啥麼會出現這樣的問題 副程式 extern double gradx(double*,int); extern double grady(double*,int); extern double gradz(double*,int); extern double ADDAB(double,double); extern double wkLx[],wkLy[],wkLz[],xp[],yp[],zp[]; extern int mcy,mcx,mcz; //mcx=mcy=mxz=60 void laplacevec(double wk[],int xcp,int ycp,int zcp){ double xx,yy,zz; int i,ix,iy,iz; for(iz=0;iz<mcz;iz++){ for(iy=0;iy<mcy;iy++){ for(ix=0;ix<mcx;ix++){ i=ix+iy*mcx+iz*mcx*mcy; xp[i]=gradx(&wk[xcp+i],ix); yp[i]=grady(&wk[xcp+i],iy); zp[i]=gradz(&wk[xcp+i],iz); }}} for(iz=0;iz<mcz;iz++){ 這裡當iz=0 程式就停止 for(iy=0;iy<mcy;iy++){ for(ix=0;ix<mcx;ix++){ i=ix+iy*mcx+iz*mcx*mcy; xx=gradx(&xp[i],ix); yy=grady(&yp[i],iy); zz=gradz(&zp[i],iz); wkLx[i]=ADDAB(xx,ADDAB(yy,zz)); }}} 測試 iz=0; or iz=3 //iz=0 時 一會兒出現exe 已提止運作的小視窗 for(iy=0;iy<mcy;iy++){ for(ix=0;ix<mcx;ix++){ i=ix+iy*mcx+iz*mcx*mcy; xx=gradx(&xp[i],ix); yy=grady(&yp[i],iy); zz=gradz(&zp[i],iz); wkLx[i]=ADDAB(xx,ADDAB(yy,zz)); }} 有人有遇過這樣的問題? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.120.96 ※ 編輯: scws 來自: 140.115.120.96 (12/03 20:34) ※ 編輯: scws 來自: 140.115.120.96 (12/03 20:38)

12/03 20:38, , 1F
你陣列怎麼配置的?
12/03 20:38, 1F

12/03 20:40, , 2F
還有 gradx 裡面作什麼? 我猜是 gradient, 那會讀到陣列外
12/03 20:40, 2F
※ 編輯: scws 來自: 140.115.120.96 (12/03 20:41)

12/03 20:44, , 3F
一維陣列 但是含三維的元素 對是作gradient
12/03 20:44, 3F

12/03 20:44, , 4F
那注意邊界條件, 會讀到陣列外
12/03 20:44, 4F

12/03 20:47, , 5F
我再去檢查一下
12/03 20:47, 5F

12/03 21:01, , 6F
xx yy zz ix iy iz 同學這是每日猜謎嗎orz
12/03 21:01, 6F

12/03 21:19, , 7F
阿 就方向的意思 好記囉
12/03 21:19, 7F

12/04 00:44, , 8F
是一個向量 i 拆成三個分量嗎
12/04 00:44, 8F
文章代碼(AID): #1IdSxOlS (C_and_CPP)