RSS   



  可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題 | 純文字版  


 


 
主題: [資訊電機] [問題][C++]2-D array與副程式中有副程式之問題   字型大小:||| 
老江
版主
等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30
School Days推廣

 . 積分: 391
 . 精華: 1
 . 文章: 3664
 . 收花: 1702 支
 . 送花: 8225 支
 . 比例: 4.83
 . 在線: 650 小時
 . 瀏覽: 18020 頁
 . 註冊: 7243
 . 失蹤: 260
#1 : 2005-5-30 08:28 PM     只看本作者 引言回覆

#include< stdio.h >
#define max_row 200
#define max_col 200
void ar1(double a[max_row][max_col],int l);
void ar2(void ar1(double a[max_row][max_col],int l),double x[max_row][max_col],int k);
void add(double a[max_row][max_col],double b[max_row][max_col],double c[max_row][max_col],int l);
void had(double a[max_row][max_col],double b[max_row][max_col],double d[max_row][max_col],int l);
int main(void)
{
    double a[max_row][max_col],b[max_row][max_col],c[max_row][max_col],d[max_row][max_col];
    int l,i,j;
    printf("請輸入陣列邊長>");
    scanf("%d",&l);
    printf("請輸入a陣列數字>");
    ar1(a,l);
    printf("請輸入b陣列數字>");
    ar2(ar1,b,l);
    add(a,b,c,l);
    had(a,b,d,l);
    for(i=0;i<l;i=i+1)
    for(j=0;j<l;j=j+1)
    printf("a+b=%lf",c[i][j]);
    for(i=0;i<l;i=i+1)
    for(j=0;j<l;j=j+1)
    printf("a*b=%lf",d[i][j]);
    return 0;
}
void ar1(double a[max_row][max_col],int l)
{
     int i,j;
     for(i=0;j<l;i++)
     for(j=0;j<l;j++)
     scanf("%lf",a[i][j]);
}
void ar2(void ar1(double a[max_row][max_col],int l),double x[max_row][max_col],int k)
{
     ar1(x,k);
}     
void add(double a[max_row][max_col],double b[max_row][max_col],double c[max_row][max_col],int l)
{
     int i,j;
     for(i=0;j<l;i++)
     for(j=0;j<l;j++)
     c[i][j]=a[i][j]+b[i][j];
}
void had(double a[max_row][max_col],double b[max_row][max_col],double d[max_row][max_col],int l)
{
     int i,j;
     for(i=0;j<l;i++)
     for(j=0;j<l;j++)
     d[i][j]=a[i][j]*b[i][j];
}

嗯,我是想做兩個2d的array(正方形的)出來
一開始是自己輸入array邊長大小,再輸入裡面的值
然後print出a array+b array與a array*b array這兩種
很不幸的,在第一行的"請輸入陣列邊長>"
輸入數字之後,程式就關了(我是打整數喔..)
通常這樣都是下一行有問題,不過我看了半天那個printf看起來很正常
我卻連看都還沒看到程式就關了

題目唯一的要求就是要有
(data type)function_1(....,(data type)function_2(...,))
在副程式裡呼叫副程式來用,所以我才會把ar2寫成那樣子



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
cji82
鐵驢友〔中級〕
等級: 5等級: 5


 . 積分: 52
 . 文章: 169
 . 收花: 424 支
 . 送花: 132 支
 . 比例: 0.31
 . 在線: 1576 小時
 . 瀏覽: 2880 頁
 . 註冊: 6946
 . 失蹤: 498
 . 台灣國
#2 : 2005-5-31 12:31 AM     只看本作者 引言回覆

這位大大不知道是用哪種platform and compiler?
大大在function中宣告了4個200x200的 double type array
以 windows來說, sizeof(double) = 8,

8x200x200x4 = 1280000 bytes 約等於宣告一個1.2MB的local memory,
不知道大大所處的環境是否可以處理超過64K的memory accessing.
也有可能是stack不夠大,
這樣子的宣告有可能已經超出stack size.
雖然宣告1.2 MB的四個array在之後的幾個int前,
但有可能後面這幾個int的位子已經被compiler放到1.2MB以後, 這塊區域可能是OS在用的,
所以scanf到&l後就破壞了一些東西, 造成程式掛掉.

參考一下吧!



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
老江
版主
等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30
School Days推廣

 . 積分: 391
 . 精華: 1
 . 文章: 3664
 . 收花: 1702 支
 . 送花: 8225 支
 . 比例: 4.83
 . 在線: 650 小時
 . 瀏覽: 18020 頁
 . 註冊: 7243
 . 失蹤: 260
#3 : 2005-5-31 08:38 PM     只看本作者 引言回覆

已經解決了
果然是那個200x200的問題
改成10x10之後就可以了
這東西書上完全都沒提到
害我怎麼找都找不到

其實當初宣告200x200也是題目說的
被擺了一道



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
cji82
鐵驢友〔中級〕
等級: 5等級: 5


 . 積分: 52
 . 文章: 169
 . 收花: 424 支
 . 送花: 132 支
 . 比例: 0.31
 . 在線: 1576 小時
 . 瀏覽: 2880 頁
 . 註冊: 6946
 . 失蹤: 498
 . 台灣國
#4 : 2005-5-31 10:16 PM     只看本作者 引言回覆

我想這個問題本質在於大大所處的platform及所用的compiler
對於local variable and stack size memory management的能力,

大大可以考慮把原來這4個200x200的double array移到main()外面,
用global variable的方法來宣告再試試看, 也許不用reduce size也可以正常執行
當然前題是你的memory夠大, memory addressing可以超過1MB



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記

   



 



所在時區為 GMT+8, 現在時間是 2024-4-28 03:52 AM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.022192 second(s), 6 queries , Qzip disabled