主題:
[資訊電機]
[問題][C++]2-D array與副程式中有副程式之問題
[打印本頁]
發表人:
老江
時間:
2005-5-30 08:28 PM
主題:
[問題][C++]2-D array與副程式中有副程式之問題
#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寫成那樣子
發表人:
cji82
時間:
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後就破壞了一些東西, 造成程式掛掉.
參考一下吧!
發表人:
老江
時間:
2005-5-31 08:38 PM
已經解決了
果然是那個200x200的問題
改成10x10之後就可以了
這東西書上完全都沒提到
害我怎麼找都找不到
其實當初宣告200x200也是題目說的
被擺了一道
發表人:
cji82
時間:
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
歡迎光臨 TWed2k (http://twed2k.org/)
Powered by Discuz! 4.1.0