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

标签 c++ compiler-errors stack runtime-error dev-c++

这是动态堆栈,从 1 到 6 有一些函数,并且 0 退出,当我选择 6 时,它显示此错误“段错误(核心转储)
",我有 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");
}

`

最佳答案

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

关于c++ - 动态堆栈,编译时出错,开发编译器和 g++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29317742/

相关文章:

gdb 堆栈奇怪

c++ - 尝试在 C++ 中为堆栈实现模板(但惨遭失败)

c++ - wxWidgets有没有和Qt的MFC Migration框架相媲美的东西?

c++ - 如何将 "camera"放入 OpenGL 的立方体中

c++ - 为什么我要在 C++ 中实现我自己的双向链表?

c++ - 苹果 LLVM 5.0 pragma 优化

c - header 中定义的 TypeDef 结构

c++ - Apple Mach -O(ID)链接器错误,ncurses

c - 双数组 - C 中的编译时错误

Android 完成 Activity 并启动另一个