c++ - dynamic stack , error while compiling , dev compiler and g++ -
this dynamic stack , , there functions 1 till 6 , , 0 exit , when choose 6 ,it's shown error "segmentation fault (core dumped) " , have g++ compiler , i'm compiling in , when use codeblocks works , can `
#include <stdlib.h> #include <iostream> using namespace std; const int n=100; struct stack{ int a[n]; int count; }; //создание стека void creation(stack *p) { p->count=0; } //проверка стека на пустоту int full(stack *p) { if (p->count==0){ return 1; } else if (p->count==n) { return -1; } else { return 0; } } //добавление элемента void add(stack *p) { int value; cout<<"Введите элемент > "; cin>>value; p->a[p->count]=value; p->count++; } //удаление элемента void delete(stack *p) { p->count--; } //вывод верхнего элемента int top(stack *p) { return p->a[p->count-1]; } //размер стека int size(stack *p) { return p->count; } int show(stack *p){ int i=0; while(i!=p->count){ cout<<p->a[i]<<endl; i++; } } void transposition(stack *p){ int temp,i = 0; int a[p->count]; int max,min = p->a[0]; int max_pos,min_pos; while(i!=p->count){ a[i] = p->a[i]; if(p->a[i] > max){ max = p->a[i]; max_pos = i; } i++; } int j=0; while(j!=p->count){ if(p->a[j] < min){ min = p->a[j]; min_pos = j; } j++; } temp = p->a[max_pos]; p->a[max_pos] = p->a[min_pos]; p->a[min_pos] = temp; } //главная функция int main() { setlocale(lc_all,"russian"); stack s; creation(&s); char number; { cout<<"1. Добавить элемент"<<endl; cout<<"2. Удалить элемент"<<endl; cout<<"3. Вывести верхний элемент"<<endl; cout<<"4. Узнать размер стека"<<endl; cout<<"5. Вывесьте все элементе стека"<<endl; cout<<"6. Перестановка max и min элемента стека"<<endl; cout<<"0. Выйти"<<endl; cout<<"Номер команды > "; cin>>number; switch (number) { case '1': if (full(&s)==-1){ cout<<endl<<"Стек заполнен\n\n"; } else{ add(&s); cout<<endl<<"Элемент добавлен в стек\n\n"; } break; //----------------------------------------------- case '2': if (full(&s)==1) { cout<<endl<<"Стек пуст\n\n"; } else{ delete(&s); cout<<endl<<"Элемент удален из стека\n\n"; } break; //----------------------------------------------- case '3': if (full(&s)==1) { cout<<endl<<"Стек пуст\n\n"; } else { cout<<"\nВерхний элемент: "<<top(&s)<<"\n\n"; } break; //----------------------------------------------- case '4': if (full(&s)==1){ cout<<endl<<"Стек пуст\n\n"; } else{ cout<<"\nРазмер стека: "<<size(&s)<<"\n\n"; } break; //----------------------------------------------- case '5': if (full(&s)==1){ cout<<endl<<"Стек пуст\n\n"; } else{ show(&s); } break; //----------------------------------------------- case '6': if (full(&s)==1){ cout<<endl<<"Стек пуст\n\n"; } else { transposition(&s); } break; //----------------------------------------------- case '0': break; default: cout<<endl<<"Команда не определена\n\n"; break; } } while(number!='0'); system("pause"); }
`
the easy way solve such problems building program in gcc / g++ -g
switch (includes debugging symbols) , running program through gdb (gdb <path program executable>
, when opens type run
). when crashes shown file name , line on crash occured.
Comments
Post a Comment