[英]Segmentation fault 11 in C++ on Mac HighSierra
當我嘗試將隊列程序中的數據放入隊列時,它將出現分段錯誤11。 我在Atom文本編輯器中使用GCC編譯器。
#include<iostream>
#include<stdlib.h>
#define MAX 5
using namespace std;
struct queue{
int data[MAX];
int awal, akhir;
}antrean;
void first(){
antrean.awal = -1;
antrean.akhir = -1;
}
bool isfull(){
if(antrean.akhir == MAX-1){
return true;
}else{
return false;
}
}
bool isempty(){
if(antrean.akhir == -1){
return true;
}else{
return false;
}
}
void tampildata(){
if(!isempty()){
for(int i=antrean.awal; i<antrean.akhir; i++){
cout<<antrean.data[i]<<" | ";
}
}
cout<<endl;
}
void inqueue(){
int elemen;
if(isempty()){
cout<<"input data : ";
cin>>elemen;
antrean.data[antrean.akhir] = elemen;
antrean.akhir++;
cout<<"data berhasil ditambah"<<endl;
tampildata();
}else{
cout<<"Queue penuh";
}
}
void dequeue(){
tampildata();
if(!isempty()){
cout<<"mengambil data "<<antrean.data[antrean.awal]<<endl;
for(int i=antrean.awal; i<antrean.akhir; i++){
antrean.data[i]=antrean.data[i+1];
}
antrean.akhir--;
}else{
cout<<"antrean empty";
}
}
void cari(){
if(!isempty() == 1){
int cari;
bool state = false;
cout << "Data yang dicari :";
cin >> cari;
for(int i = antrean.awal; i<antrean.akhir; i++){
if (antrean.data[i] == cari) {
cout << "Data ditemukan pada indeks Ke-:" << antrean.data[i]+1<< endl;
state = true;
break;
}
}
} else{
cout << "Data tidak ditemukan";
}
}
void totalarray(){
int temp = 0;
for(int i=-1; i<antrean.akhir; i++){
temp = temp+antrean.data[i];
}
cout << "Total nilainya :" << temp;
}
int main(){
int pilihan, elemen;
first();
do{
tampildata();
cout<<"1. Init"<<endl<<"2. inQueue"<<endl<<"3. deQueue"<<endl<<"4. tampil data"<<endl<<"5. Cari data"<<endl << "6. Total nilai"<<endl<<"7. Rata-rata Array"<<endl;
cout<<"8. Nilai terbesar"<<endl<<"9. Nilai terkecil"<<endl<<"10. Clear"<<endl<<"11. Keluar";
cout<<"input pilihan :";
cin>>pilihan;
switch(pilihan){
case 1:
first();
break;
case 2:
inqueue();
break;
case 3:
dequeue();
break;
case 4:
tampildata();
break;
case 5:
cari();
break;
case 6:
totalarray();
break;
case 7:
exit(0);
}
}
while(pilihan!=7);
return 0;
}
您的問題在於櫃台的價值。 您最初將其設置為-1(盡管0元素為0可能更有意義?)。 然后,當您第一次添加到隊列時,您基本上想將元素添加到第(-1)位。 這將導致您在數組的邊界之外進行寫入,並且發生分段錯誤。
antrean.akhir = -1;
...
antrean.data[antrean.akhir] = elemen;
您可以簡單地將計數器設置為0,並使其實際計算數組中元素的數量。
我還沒有完成其余的代碼,所以不能說以后不會因為其他原因而崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.