【问题标题】:dynamic stack , error while compiling , dev compiler and g++动态堆栈,编译时出错,开发编译器和 g++
【发布时间】:2015-03-28 13:31:52
【问题描述】:

这是动态堆栈,从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");
}

`

【问题讨论】:

  • 为什么在 C++ 中使用对它们进行操作(甚至初始化)的结构和方法而不是对象?这是在重新发明轮子......
  • 这可能是因为transposition 中未初始化的数组索引。使用调试器逐步执行该函数,看看哪些设置为合理值,哪些没有设置。
  • 警告:GDB:设置控制终端失败:不允许操作
  • 这看起来像 C,除了使用 std::cout,如果你想用 C++ 方式使用一个类并删除数组以支持 std::vector&lt;stdlib.h&gt; 应该是 @ 987654326@
  • DevC++ 已经过时了,AFAIK。升级你的编译器。

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


【解决方案1】:

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

【讨论】:

  • 感谢您的建议,在终端中它工作 g++ -g test.cpp,但在开发编译器中不起作用
  • 你应该可以在 Dev-C++ 的编译设置中设置它
  • 有这样的事情,我的操作系统是Linux Ubuntu,但我也必须在Windows中运行它,这就是我遇到问题的原因......!如果你有 dev c++ 编译器,你能运行它吗,或者你能告诉我如何在 Linux 中安装 Dev c++ 吗?提前致谢
猜你喜欢
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
相关资源
最近更新 更多