為什麼這篇c陣列鄉民發文收入到精華區:因為在c陣列這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者andy88566y (貓龍)看板b02902HW標題[計程] [C] 陣列宣告太大就當掉的原因...
c陣列 在 MenClub.hk Instagram 的精選貼文
2021-04-23 16:10:15
【Apple】春季發布會五大新品懶人包:七色iMac、M1 iPad Pro、AirTag、紫色iPhone 12 Apple春季發布會於今日凌晨舉行,會內除咗公布傳咗好耐嘅AirTag、七色iMac同iPad Pro,就連iPhone 12都有新顏色。小編為大家準備好懶人包,一次過睇晒所有重點...
同學好,
有同學反應當陣列宣太大程式就會當掉。例如
int arr1[20][20]; 這樣做沒問題,測資也通過。
int arr2[512][512]; 這樣做程式在自己電腦竟然直接當掉,但傳
到judgegirl是全對5分。
這是由於記憶體大小的關係。sizeof(arr2)是4x512x512,大約1MB
有些比較差的作業系統(比如Windows)限制只能用不超過1MB記憶體
所以arr2會導致值程式當掉。如果你使用Linux,Mac等,arr2就沒
問題。
因此如果同學在Windows下寫程式,遇到這問題解法有:
1. 捨棄Windows,使用更適合寫程式的作業系統如Linux
2. 在編譯時加上參數 -Wl,--stack,8000000 例如
gcc -Wl,--stack,8000000 hw10.c
這意思是告訴編譯器這個程式要用8000000(大約8MB)的記憶體,而
不受限於原本的1MB,當然8000000也可以改成其他你喜歡的數字,
只要記得比你要用到的記憶體量大。
3. 如果你很確定你寫的程式碼是正確的,當掉的唯一理由是因為
陣列太大。那就乾脆直接上傳到judgegirl, 如果你真的是對的,
judgegirl不會因為這種陣列理由當掉,她一定會還你清白的!
judgegirl宣告到1024x1024都還沒問題。
4. 使用以後才會教到(或許這學期教不到)的語法、程式技巧。
例如static變數,也就是在宣告前加static這個字:
static int arr2[512][512]; //這樣就不會當掉了,很單純吧!
或是全域變數,把陣列的宣告放在main()的前一行:
int arr2[512][512]; //移到main前面就不會當掉了!
main()
{
....
還有很多其他還沒教的方法,但詳細理由現在無法解釋,
需等各位學到更後面。但這封信內已經提供數種解法了。
如果各位對這問題還有疑慮,請寄信問我。
by 江懿
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.162.101.198