以下是我的程式
GGG是我故意宣告的
因為在別的程式有同樣的問題
所以我再寫一個簡單程式來試試
#include
#include
void main()
{
int GGG[240][320][3]={0};
int a=10,b=0;
printf("a=%d\n",a);
printf("b=%d\n",b);
b=a;
printf("b=%d\n",b);
}
當GGG宣告為int GGG[240][320][4]={0};時
程式在 "執行" 就會有錯誤出現(compile和build不會有錯)
就是 " RWTEST.exe發生問題 " 的視窗出現
請問這樣是不是因為記憶體過大超出限制範圍呢?
可是記憶體不是只有用
240*320*3*4bytes = 1228800bytes = 1200kbs = 1.171875mbs
若是的話
記憶體的限制大小是多少?
宣告變數所佔用的記憶體是使用主機板上插的記憶體嗎?
並且要如何改進此問題呢?
請各位教導一下
感謝各位
2007-07-11 09:17:26 · 4 個解答 · 發問者 峻瑋 1 in 電腦與網際網路 ➔ 程式設計
我使用是VC++6.0
這個情況在其他電腦也一樣
我有試過摟
謝謝你給我意見
感謝
2007-07-11 16:44:38 · update #1
好奇怪喔
為什麼我試過三台其他電腦
只要宣告
int GGG[240][320][ 4 ]={0};
這樣就不可以了
可是你們的卻可以
謝謝你回答我的問題
我試試看用動態記憶體來做的
感謝
2007-07-12 07:44:02 · update #2
我個人使用VC++6.0測試您的程式碼
編譯跟執行都是正常的
但是如果將
GGG[240][320][3]改成
GGG[921600]
ps. 240*320*3*4=921600
則會生Stack Overflow的錯誤
如果是
int *GGG = (int*)malloc(2097152);
則程式不會發生Stack Overflow
我想您可以試著用malloc的方式
去取得記憶體
2007-07-12 05:11:16 · answer #1 · answered by chen 3 · 0⤊ 0⤋
//將GGG宣告成Global Variable
int GGG[240][320][3]={0};
void main()
{
int a=10,b=0;
printf("a=%d\n",a);
printf("b=%d\n",b);
b=a;
printf("b=%d\n",b);
}
2007-07-14 23:54:10 · answer #2 · answered by ycliaw 1 · 0⤊ 0⤋
在一般的程式中.stack的空間是有限的.但heap是"無限的"(其實還是有.只不過比stack還要大很多)
stack的空間是Operating System設定的.而heap的空間是跟virtual memory和physical memory有關.
你的程式若在執行時用光你的stack空間的話.程式會crash.你的GGG是宣告在main()這個函式裡.所以其記憶體是來自stack而不是heap.所以不能太大.
2007-07-13 18:16:45 · answer #3 · answered by 龍 7 · 0⤊ 0⤋
我編譯和執行是沒問題的。
但是有一些編譯器會限制陣列或是使用記憶體的大小,造成編譯失敗等等這類的現象。當執行程式時,雖然由作業系統控管電腦資源,使用記憶體時是經由主機板上的記憶體來管理硬碟上的虛擬記憶體,所以應當是與硬碟的虛擬記憶體大小有關,而通常一般「虛擬記憶體」是主機板上記憶體的約 1.5 倍大。
我想問題可能在於你所使用的「編譯器」,我在懷疑你的編譯器是不是用「DevC++」。
2007-07-11 15:53:48 · answer #4 · answered by Big_John-tw 7 · 0⤊ 0⤋