Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
snw
10 / 10 / 0
Регистрация: 11.10.2012
Сообщений: 93
#1

Ошибки при попытке прочитать в указанном месте - C++

11.10.2012, 17:08. Просмотров 395. Ответов 8
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
#include <iomanip>
#include <locale>
using namespace std;
 
struct stack
{ 
    char c;
    struct stack *next;
};
 
char pop(stack**);
stack *push(stack *st, char a);
int PRIOR(char a);
 
int main()
{
    stack *OPERS=NULL;
    char a[80], outstr[80];
    int k=0,point=0;
    setlocale(LC_ALL,"Rus");
    
    do
    {
        cout<<"Введите выражение (в конце '='):";
        cin>>a[k];
        while(a[k]!='\0'&&a[k]!='=')
        {
            if(a[k]==')')
            {
                while(OPERS->c!='(')
                    outstr[point++]=pop(&OPERS);
                pop(&OPERS);
            }
            if(a[k]=='(')
                OPERS=push(OPERS,'(');
            if(a[k]=='+'||a[k]=='/'||a[k]=='*'||a[k]=='-')
            {
                if(OPERS==NULL)
                    OPERS=push(OPERS,a[k]);
                else
                    if(PRIOR(OPERS->c)<PRIOR(a[k]))
                        OPERS=push(OPERS, a[k]);
                    else
                    {
                        while((OPERS!=NULL)&&(PRIOR(OPERS->c)>=PRIOR(a[k])))
                            outstr[point++]=pop(&OPERS);
                        OPERS=push(OPERS,a[k]);
                    }
            }
            k++;
        }
        while(OPERS!=NULL)
        outstr[point++]=pop(&OPERS);
        outstr[point]='/0';
        cout<<"\n "<<outstr<<"\n ";
        cout<<"\nПовторить(y/n)?";
    }while(getchar()!='n');
}
 
stack *push(stack *HEAD, char a)
{
  stack *PTR;
  PTR=new stack;
    if(PTR==NULL) 
  {
    cout<<"нет памяти";
    exit(-1);            
  }
  PTR->c=a;                                
  PTR->next=HEAD;           
  return PTR;                               
}
 
 
char pop(stack **HEAD)
{
  stack *PTR;
  char a;
  if(*HEAD==NULL) return '\0'; 
  PTR=new stack;
  PTR=*HEAD;                   
a=PTR->c; //вот в этом месте отладчик выдает сообщение с адресами.
  *HEAD=PTR->next;         
  delete PTR;   
  return a;                   
}
 
 
int PRIOR(char a)
{
  switch(a)
  {
    case '*':
    case '/':
         return 3;
 
    case '-':
    case '+':
         return 2;
 
    case '(':
         return 1;
  }
}
Необработанное исключение в "0x012b13b9" в "sdsd.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000032".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 17:08     Ошибки при попытке прочитать в указанном месте
Посмотрите здесь:

Вывод на экран список файлов и название программ С++ , находящимся в указанном при запуске программы каталоге C++
Ошибки на ровном месте (VS2010) C++
При попытке найти окно выдает 0 C++
Доделать и исправить. Дано слово из 12 букв. Поменять местами его трети: первую треть разместить на месте третьей, вторую на месте первой и 3 на 2 C++
C++ XE3 выдаёт ошибки при попытке присвоения значения переменной string
Программа вылетает при попытке открыть файл C++
C++ Ошибка при попытке удаления указателя
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
11.10.2012, 17:17     Ошибки при попытке прочитать в указанном месте #2
Сразу вижу у тебя ошибку в неправильном вводе. Как ты просишь ввести выражение и сохраняешь его в одной ячейке a[0]?
snw
10 / 10 / 0
Регистрация: 11.10.2012
Сообщений: 93
12.10.2012, 02:59  [ТС]     Ошибки при попытке прочитать в указанном месте #3
Хм... недочеты.. спасибо, вы раскрыли глаза! а что насчет функции ?
snw
10 / 10 / 0
Регистрация: 11.10.2012
Сообщений: 93
13.10.2012, 10:40  [ТС]     Ошибки при попытке прочитать в указанном месте #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <iomanip>
#include <locale>
using namespace std;
 
struct stack
{ 
    char c;
    struct stack *next;
};
 
char pop(stack ** top);
void push(stack **st, char a);
int PRIOR(char a);
 
int main()
{
    
    char a[80], outstr[80];
    int k=0,point=0;
    setlocale(LC_ALL,"Rus");
    
    stack *OPERS;
    
    freopen("input.txt", "r",stdin);
    freopen("output.txt", "w", stdout);
 
    
    do
    {
        cout<<"Введите выражение (в конце '='):";
        cin>>a[k];
        while(a[k]!='\0'&&a[k]!='=')
        {
            if(a[k]==')')
            {
                while(OPERS->c!='(')
                    outstr[point++]=pop(&OPERS);
                pop(&OPERS);
            }
            if(a[k]=='(')
                OPERS=push(OPERS,'(');
            if(a[k]=='+'||a[k]=='/'||a[k]=='*'||a[k]=='-')
            {
                if(OPERS==NULL)
                    OPERS=push(OPERS,a[k]);
                else
                    if(PRIOR(OPERS->c)<PRIOR(a[k]))
                        OPERS=push(OPERS, a[k]);
                    else
                    {
                        while((OPERS!=NULL)&&(PRIOR(OPERS->c)>=PRIOR(a[k])))
                            outstr[point++]=pop(&OPERS);
                        OPERS=push(OPERS,a[k]);
                    }
            }
            k++;
        }
        while(!feof(stdin))
        outstr[point++]=pop(&OPERS);
        outstr[point]='/0';
        cout<<"\n "<<outstr<<"\n ";
        cout<<"\nПовторить(y/n)?";
    }while(getchar()!='n');
}
 
void push(stack **HEAD, char a)
{
  stack *pv;
  pv=new stack;
  pv->c=a;                                
  pv->next=*HEAD;           
  *HEAD=pv;                               
}
 
 
char pop(stack **HEAD)
{
  char a=(*HEAD)->c;
  stack *pv=*HEAD;
  *HEAD = (*HEAD)->next;                   
  delete pv;   
  return a;                   
}
 
 
int PRIOR(char a)
{
  switch(a)
  {
    case '*':
    case '/':
         return 3;
 
    case '-':
    case '+':
         return 2;
 
    case '(':
         return 1;
  }
}
вот чуть переработанный код.. ошибки из-за идентификатора OPERS. Хочу сделать ввод через файлы.. поставьте на путь истинный, заплутавшего..
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
13.10.2012, 10:51     Ошибки при попытке прочитать в указанном месте #5
В чём суть задачи ?
snw
10 / 10 / 0
Регистрация: 11.10.2012
Сообщений: 93
13.10.2012, 12:28  [ТС]     Ошибки при попытке прочитать в указанном месте #6
Задача состоит в конвертации из инфиксной записи в постфиксную (Обратная Польская Запись). Ввожу выражение, оно обрабатывается и вычисляется.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
#include <iomanip>
#include <locale>
using namespace std;
 
struct stack
{ 
    char c;
    struct stack *next;
};
 
char pop(stack ** top);
void push(stack **st, char a);
int PRIOR(char a);
 
int main()
{
    
    char a[80], outstr[80];
    int k=0,point=0;
    setlocale(LC_ALL,"Rus");
        
    freopen("input.txt", "r",stdin);
    freopen("output.txt", "w", stdout);
 
    stack OPERS;
    
    do
    {
        cin>>a[k];
        while(a[k]!='\0')
        {
            if(a[k]==')')
            {
                while((&OPERS)->c!='(')
                    outstr[point++]=pop(&OPERS);
                pop(&OPERS);
            }
            if(a[k]=='(')
                OPERS=push(&OPERS,'(');
            if(a[k]=='+'||a[k]=='/'||a[k]=='*'||a[k]=='-')
            {
                if((&OPERS)==NULL)
                    OPERS=push(&OPERS,a[k]);
                else
                    if(PRIOR((&OPERS)->c)<PRIOR(a[k]))
                        OPERS=push(&OPERS, a[k]);
                    else
                    {
                        while(((&OPERS) != NULL) && (PRIOR((&OPERS)->c) >= PRIOR(a[k])))
                        {   outstr[point++]=pop(&OPERS);}
                        OPERS=push((&OPERS),a[k]);
                    }
            }
            k++;
        }
        while(!feof(stdin))
        outstr[point++]=pop(&OPERS);
        outstr[point]='/0';
        cout<<"\n "<<outstr<<"\n ";
        cout<<"\nПовторить(y/n)?";
    }while(getchar()!='n');
}
 
void push(stack **HEAD, char a)
{
  stack *pv;
  pv=new stack;
  pv->c=a;                                
  pv->next=*HEAD;           
  *HEAD=pv;                               
}
 
 
char pop(stack **HEAD)
{
  char a=(*HEAD)->c;
  stack *pv=*HEAD;
  *HEAD = (*HEAD)->next;                   
  delete pv;   
  return a;                   
}
 
 
int PRIOR(char a)
{
  switch(a)
  {
    case '*':
    case '/':
         return 3;
 
    case '-':
    case '+':
         return 2;
 
    case '(':
         return 1;
  }
}
вот кстати очередная итерация кода... неразбериха с OPERS - несовместимость в указателях..
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2012, 12:49     Ошибки при попытке прочитать в указанном месте #7
У вас push() ничего не возвращает. Тогда что вы присваиваете OPERS в 41 строке и далее?
snw
10 / 10 / 0
Регистрация: 11.10.2012
Сообщений: 93
13.10.2012, 13:18  [ТС]     Ошибки при попытке прочитать в указанном месте #8
Там ж вроде принцип какой-то был с указателями... push по другому не знаю как реализовать )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2012, 13:22     Ошибки при попытке прочитать в указанном месте
Еще ссылки по теме:

Ошибка при попытке создания шаблона C++
Ошибка при попытке открытия файла C++
C++ Возникают ошибки при попытке использования библиотеки graphics.h
C++ Вылет при попытке очистки консоли
Компилятор выдает три ошибки, при попытке скомпилировать программу C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
13.10.2012, 13:22     Ошибки при попытке прочитать в указанном месте #9
Посмотри похожая тема, может что-то подчерпнёшь для себя. Преобразовать выражение в постфиксную форму
Yandex
Объявления
13.10.2012, 13:22     Ошибки при попытке прочитать в указанном месте
Ответ Создать тему
Опции темы

Текущее время: 16:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru