动态堆栈,编译时出错,开发编译器和 g++

dynamic stack , error while compiling , dev compiler and g++

这是动态堆栈,从1到6有一些函数,0退出,当我选择6时,显示这个错误“Segmentation fault (core dumped) “,我有 g++ 编译器,我正在用它编译,但是当我使用代码块时它可以工作,任何人都可以帮助 `

#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;
do
{   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");
}

`

解决此类问题的简单方法是使用 -g 开关(包括调试符号)在 GCC / G++ 中构建程序,然后通过 GDB 运行 您的程序(gdb <path to program executable>, 当它打开时键入 run)。当它崩溃时,您将看到文件名和发生崩溃的行。