#3531: 記憶體錯誤??


boy10016863 (慢慢)

學校 : 國立臺東大學
編號 : 10965
來源 : [61.224.11.227]
最後登入時間 :
2020-03-01 14:41:56
d124. 3的倍数 | From: [210.240.176.185] | 發表日期 : 2010-03-13 15:50

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{  
 char n[10000];
 int i,sum=0;
      for(i=0;i<10000;i++){
         n[i]=0;}
 while(cin >> n){
      for(i=0;i<strlen(n);i++){
         n[i]=n[i]-48;}
      for(i=0;i<strlen(n);i++){
         sum+=n[i];}
      if(sum%3==0)
        cout << "yes" <<endl;
      else
        cout << "no" << endl;
      for(i=0;i<10000;i++){
         n[i]=0;}
      sum=0;
 }
     
    return EXIT_SUCCESS;
}

請問一下為什麼會發生這個錯誤呢?

 
#3533: Re:記憶體錯誤??


linishan (L)

學校 : 國立交通大學
編號 : 1090
來源 : [104.132.150.102]
最後登入時間 :
2019-05-10 19:57:54
d124. 3的倍数 | From: [125.228.224.192] | 發表日期 : 2010-03-13 20:51

#include
#include
#include
using namespace std;

int main(int argc, char *argv[])
{  
 char n[10000];
 int i,sum=0;
      for(i=0;i<10000;i++){
         n[i]=0;}
 while(cin >> n){
      for(i=0;i         n[i]=n[i]-48;}
      for(i=0;i         sum+=n[i];}
      if(sum%3==0)
        cout << "yes" <      else
        cout << "no" << endl;
      for(i=0;i<10000;i++){
         n[i]=0;}
      sum=0;
 }
     
    return EXIT_SUCCESS;
}

請問一下為什麼會發生這個錯誤呢?


(-10^10001<=n<=10^10001)

需要10001個空間

你只有宣告10000個

所以會陣列索引值超出範圍

我建議改到10005 : )

 
#3534: Re:記憶體錯誤??


boy10016863 (慢慢)

學校 : 國立臺東大學
編號 : 10965
來源 : [61.224.11.227]
最後登入時間 :
2020-03-01 14:41:56
d124. 3的倍数 | From: [210.240.176.185] | 發表日期 : 2010-03-13 23:07

喔喔 原來是這樣

新手受教了

謝謝


 
ZeroJudge Forum