[問題] 一new程式就自動關掉

看板C_and_CPP (C/C++)作者 (你在哪)時間13年前 (2012/10/05 00:20), 編輯推噓0(0012)
留言12則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev-c++ 程式碼: double* recursive(double xn[],int size) { int k,item; double wn_r,wn_i; double w_r,w_i;// size=8 double test[10]; item=size; printf("item=%d\n",item);system("pause"); if(item==1) { double *result=new double[2]; *(result)=*xn;*(result+8)=*(xn+8); return result; } wn_r=cos(2*M_PI/point);wn_i=sin(-2*M_PI/point); w_r=1.0;w_i=0.0; double *odd=new double[item]; double *even=new double[item]; for(k=0;k<=2*item-1;k++) //seperate odd and even { if(k%4==0) {*(odd+(k/4)*2*8)=xn[k];} else if(k%4==1) {*(odd+(2*(k-1)/4+1)*8)=xn[k];} else if(k%4==2) {*(even+(k-2)/4*2*8)=xn[k];} else if(k%4==3) {*(even+((k-3)/4*2+1)*8)=xn[k];} system("pause"); } printf("before make result\n");system("pause"); double *result_odd=new double[item]; printf("result_odd's size=%d\n",sizeof(result_odd));system("pause"); double *result_even=new double[item]; printf("result_even's size=%d\n",sizeof(result_even));system("pause"); result_odd=recursive(odd,sizeof(odd)/16); result_even=recursive(even,sizeof(even)/16); double *final_result=new double[item*2]; for(k=0;k<=item/2-1;k++) { *(final_result+16*k)= *(result_even+16*k) *(final_result+16*k+8)= *(result_even+16*k+8) *(final_result+8*item/2*2+8*(2*k))= *(result_odd+16*k)*w_r *(final_result+8*item/2*2+8*(2*k+1))= *(result_odd+16*k)*w_i } return final_result; } 我在main裡call它 才進去第一次 還沒到遞迴那行 在紅色new的時候程式就自關掉 我上下都插system("pause")也沒有用 上面那個pause一按掉 程式一閃就不見了 不會到下面的pause 是不能new太多嗎? 因為我把上面的new去掉後 紅色那行new就有new出來耶(不會閃掉 且接著執行) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.239.249

10/05 00:22, , 1F
我MAIN裡很空 第一次呼叫函數進去 紅色那行是程式執行以來
10/05 00:22, 1F

10/05 00:22, , 2F
第三個new
10/05 00:22, 2F

10/05 00:29, , 3F
現在流行直接在文章內po程式碼嗎?
10/05 00:29, 3F
※ 編輯: hadbeen 來自: 114.32.239.249 (10/05 00:38) ※ 編輯: hadbeen 來自: 114.32.239.249 (10/05 00:58)

10/05 01:17, , 4F
if(item==1)裏面有誤,存取到不該存取的值,爆掉不意外
10/05 01:17, 4F

10/05 01:19, , 5F
還有幹嘛堅持*(result+8)這樣? 只讓code更難看...
10/05 01:19, 5F

10/05 01:24, , 6F
第一次呼叫時item是8 所以if不會成立 而且它閃掉是在第一
10/05 01:24, 6F

10/05 01:25, , 7F
次呼叫時 連第一次遞迴都沒有到 沒有很多NEW阿 0.0
10/05 01:25, 7F

10/05 01:29, , 8F
result是new double[2],卻用到了*(result + 8) ...??
10/05 01:29, 8F

10/05 01:32, , 9F
double的size不是8嗎? +0是指到第一個 +8指到第二個?
10/05 01:32, 9F

10/05 01:33, , 10F
xD result[8] vs *(result+8) 後者多兩字元, 也難看
10/05 01:33, 10F

10/05 01:34, , 11F
*(result+8)實際上是「從result開始數的第8個double」
10/05 01:34, 11F

10/05 01:35, , 12F
建議你把程式裡的 *(x+y) 改成 x[y] 會比較容易找錯誤
10/05 01:35, 12F
文章代碼(AID): #1GRRTSfJ (C_and_CPP)
文章代碼(AID): #1GRRTSfJ (C_and_CPP)