#6127: 請問為什麼會記憶體區段錯誤


jimmyee (LEVEL_UP)

學校 : 國立臺灣大學
編號 : 20170
來源 : [140.112.42.92]
最後登入時間 :
2016-03-18 15:33:33
d378. 最小路徑 | From: [140.112.242.128] | 發表日期 : 2011-11-30 11:32

程式碼長這樣

#include<iostream>
using namespace std;
main()
{
    int n=1,a,b,i,j;
    while(cin >> a >> b)
    {
        cout << "Case #" << n++ << " :\n";
        int map[a][b];
        for(i=0;i<a;i++)
            for(j=0;j<b;j++)
                cin >> map[i][j];
        int sum[a][b];
        sum[0][0]=0;
        for(i=1;i<a;i++)
            sum[0][i]=sum[0][i-1]+map[0][i];
        for(i=1;i<b;i++)
            sum[i][0]=sum[i-1][0]+map[i][0];
        for(i=1;i<a;i++)
            for(j=1;j<b;j++)
            {
                sum[i][j]=sum[i-1][j];
                if(sum[i][j-1]<sum[i][j])
                    sum[i][j]=sum[i][j-1];
                sum[i][j]+=map[i][j];
            }
        cout << sum[a-1][b-1] << endl;
    }
}

 
#8245: Re:請問為什麼會記憶體區段錯誤


a450 (要学会宽容)

學校 : 福建省福州第十九中学
編號 : 33926
來源 : [118.189.34.85]
最後登入時間 :
2016-04-05 21:29:33
d378. 最小路徑 | From: [27.155.222.24] | 發表日期 : 2013-09-29 13:06

不知道。。我也RE了


 
#29839: Re:請問為什麼會記憶體區段錯誤


luray0601@gmail.com (QWERTYPIG)

學校 : 臺北市私立復興實驗高級中學
編號 : 139334
來源 : [36.226.26.217]
最後登入時間 :
2023-03-24 20:42:11
d378. 最小路徑 | From: [1.169.122.4] | 發表日期 : 2022-04-04 21:55

程式碼長這樣

#include
using namespace std;
main()
{
    int n=1,a,b,i,j;
    while(cin >> a >> b)
    {
        cout << "Case #" << n++ << " :\n";
        int map[a][b];
        for(i=0;i<a;i++)
            for(j=0;j<b;j++)
                cin >> map[i][j];
        int sum[a][b];
        sum[0][0]=0;
        for(i=1;i<a;i++)
            sum[0][i]=sum[0][i-1]+map[0][i];
        for(i=1;i<b;i++)
            sum[i][0]=sum[i-1][0]+map[i][0];
        for(i=1;i<a;i++)
            for(j=1;j<b;j++)
            {
                sum[i][j]=sum[i-1][j];
                if(sum[i][j-1]<sum[i][j])
                    sum[i][j]=sum[i][j-1];
                sum[i][j]+=map[i][j];
            }
        cout << sum[a-1][b-1] << endl;
    }
}

問題出在「int map[a][b]」這一行

電腦是先呼叫記憶體才吃輸入,因此在申請記憶體時電腦其實不知道a和b的值,所以就隨便申請一個數字。

如果他申請的數字小於a或b的話就會出現記憶體區段錯誤。

建議一開始就設成最大值(int map[101][101])

希望有幫助

 
ZeroJudge Forum