#27839: 記憶體區段錯誤(RE)


hth960116@gmail.com (黃庭晧)

學校 : 不指定學校
編號 : 150956
來源 : [118.170.109.125]
最後登入時間 :
2021-04-21 20:24:20
b537. 分數運算-1 -- 老師的教甄題 | From: [223.141.187.12] | 發表日期 : 2021-11-01 23:30

#include<iostream>

#include<vector>

using namespace std;

int main(){

vector<double> k;

bool check[100000];

for(int i = 2; i < 100000; i++) check[i] = 0;

k.push_back(0);

k.push_back(1);

check[0] = 1;

check[1] = 1; 

double a, b, x;

int j;

while(cin >> a >> b){

x = a / b;

j = 1;

while(1){

if(check[j] == 0){

check[j] = 1;

if(j % 2 == 0) k.push_back(1 + k[j/2]);

else k.push_back(1 / k[j-1]);

}

if(k[j] - x <= 0.00001 && k[j] - x >= -0.00001){

cout << j << endl;

break;

j++; 

}

}

return 0; 

}

錯誤訊息:Segmentation fault (core dumped) ,自己用dev-c++不會有這個問題,另外也想請問除了陣列溢位還有哪些操作容易造成這個問題?

 
#27845: Re:記憶體區段錯誤(RE)


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
b537. 分數運算-1 -- 老師的教甄題 | From: [39.9.236.11] | 發表日期 : 2021-11-02 20:22

#include

#include

using namespace std;

int main(){

vector k;

bool check[100000];

for(int i = 2; i < 100000; i++) check[i] = 0;

k.push_back(0);

k.push_back(1);

check[0] = 1;

check[1] = 1; 

double a, b, x;

int j;

while(cin >> a >> b){

x = a / b;

j = 1;

while(1){

if(check[j] == 0){

check[j] = 1;

if(j % 2 == 0) k.push_back(1 + k[j/2]);

else k.push_back(1 / k[j-1]);

}

if(k[j] - x <= 0.00001 && k[j] - x >= -0.00001){

cout << j << endl;

break;

j++; 

}

}

return 0; 

}

錯誤訊息:Segmentation fault (core dumped) ,自己用dev-c++不會有這個問題,另外也想請問除了陣列溢位還有哪些操作容易造成這個問題?

 

如果記憶體使用太多也是這個錯誤
你的程式確實會發生陣列溢位,如果答案大於100000就會出錯(例如輸入"1 25")

 
ZeroJudge Forum