[問題] 資料太多會出現程式當掉

看板C_and_CPP (C/C++)作者 (徵威寶聊天....XD)時間16年前 (2010/03/28 00:27), 編輯推噓1(1010)
留言11則, 3人參與, 最新討論串1/1
目前在撰寫一個簡單的轉檔程式,程式如下: #include <stdio.h> #define SIZE 100 int max_x(int ),max_y(int ),min_x(int ),min_y(int ); int compare_max_x_num=0,compare_max_y_num=0,compare_min_x_num=999,compare_min_y_num=999; int main(){ int x[SIZE]={0},y[SIZE]={0},bin[SIZE],output[SIZE][SIZE]={0}; int count=0,x_max,x_min,y_max,y_min; int x_quadrant,y_quadrant; int conver_compare_num; char conver_char[62]={'.','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; FILE *f1=fopen("aa.txt","r"); FILE *f2=fopen("bb.txt","w"); while (fscanf(f1,"%d,%d,%d",&x[count],&y[count],&bin[count]) != EOF ){ //開檔讀值 output[x[count]][y[count]]=bin[count]; //抓 X座標 Y座標 最大最小值 x_max=max_x(x[count]); x_min=min_x(x[count]); y_max=max_y(y[count]); y_min=min_y(y[count]); count++; } fclose(f1); //印出轉檔之後的結果 for (y_quadrant=y_min;y_quadrant<=y_max;y_quadrant++){ for (x_quadrant=x_min;x_quadrant<=x_max;x_quadrant++){ //設定轉換數值 if (output[x_quadrant][y_quadrant]==254) fprintf(f2,"P"); else{ for (conver_compare_num=0;conver_compare_num<62;conver_compare_num++){ while (output[x_quadrant][y_quadrant]==conver_compare_num){ fprintf (f2,"%C",conver_char[conver_compare_num]); break; } } } } fprintf (f2,"\n"); } return 0; } int max_x(int num_x) { if (num_x>=compare_max_x_num) compare_max_x_num=num_x; return compare_max_x_num; } int min_x(int num_x1) { if (num_x1<=compare_min_x_num) compare_min_x_num=num_x1; return compare_min_x_num; } int max_y(int num_y) { if (num_y>=compare_max_y_num) compare_max_y_num=num_y; return compare_max_y_num; } int min_y(int num_y1) { if (num_y1<=compare_min_y_num) compare_min_y_num=num_y1; return compare_min_y_num; } 若aa.txt為簡單的幾行 2,-2,254 3,-2,254 4,-2,254 5,-2,254 則可以成功創造出bb.txt 但是如果將SIZE改為10000 aa.txt若改為 http://www.badongo.com/file/21567968 (aa.txt直接由aa.CSV更改附檔名) 則會出現 http://www.badongo.com/pic/9140477 此錯誤訊息 請問該如何解決此問題? 謝謝各位大大的指點(已經卡關好久了....囧) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.17.153 ※ 編輯: Mrdx 來自: 112.104.17.153 (03/28 00:32) ※ 編輯: Mrdx 來自: 112.104.17.153 (03/28 00:33) ※ 編輯: Mrdx 來自: 112.104.17.153 (03/28 00:33) ※ 編輯: Mrdx 來自: 112.104.17.153 (03/28 00:34)

03/28 00:35, , 1F
單純只改SIZE就會錯誤的話 可參考置底第十一誡
03/28 00:35, 1F

03/28 01:49, , 2F
這四個陣列共用去 (SIZE^2+3SIZE)*4 的空間
03/28 01:49, 2F

03/28 01:49, , 3F
當 SIZE = 10000 時 上式約為 400M
03/28 01:49, 3F

03/28 01:50, , 4F
顯然 stack size 應該沒那麼大...
03/28 01:50, 4F

03/28 06:43, , 5F
請問修改成將陣列x=(int*)malloc(100000*sizeof(int))程式
03/28 06:43, 5F

03/28 06:44, , 6F
碼是否還有地方需要修改?因為這樣下去跑還是會出現這個錯誤
03/28 06:44, 6F

03/28 06:44, , 7F
謝謝各位大大的指導
03/28 06:44, 7F

03/28 07:53, , 8F
又發現如果資料20行,SIZE維持100的話也會出現此錯誤..= =
03/28 07:53, 8F

03/28 07:53, , 9F
到底是哪裡出了問題><"
03/28 07:53, 9F

03/28 19:20, , 10F
目前實驗出來,不管SIZE是30或是100,資料只要超過21行就
03/28 19:20, 10F

03/28 19:20, , 11F
會當掉
03/28 19:20, 11F
文章代碼(AID): #1BhZ7rFr (C_and_CPP)
文章代碼(AID): #1BhZ7rFr (C_and_CPP)