动态堆栈,编译时出错,开发编译器和 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
)。当它崩溃时,您将看到文件名和发生崩溃的行。
这是动态堆栈,从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
)。当它崩溃时,您将看到文件名和发生崩溃的行。