Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
slrvsp
1 / 1 / 0
Регистрация: 19.11.2009
Сообщений: 15
1

Ошибка при передаче строк в функцию, ошибка при формировании дерева

04.12.2009, 00:00. Просмотров 1265. Ответов 3
Метки нет (Все метки)

Курсовой проект, в основе база данных, данные записываются в двоичное дерево. Есть 2 проблемы:
1) Если я считываю структуру с файла выкидывает ошибку какую то непонятную:
Unhandled exception at 0x00411d29 in test.exe: 0xC0000005: Access violation reading location 0x0000000b.
По ходу не может сформировать левое поддерево, хотя если не из файла всё прекрасно работает помогите плиз.
2) когда я передаю данные в функцию addtree они как то по китайски передаются. Я уверен, что передача неправильная, однако как правильно передать не знаю.

Отметил места ошибок в коде, помогите плиз ребят.

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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#include <iostream>
using namespace std;
#include <iomanip>
using namespace std;
#include <stdlib.h>
#include <conio.h>
 
FILE *fp;
 
    struct  vokzal_info {
    int  nomer;
    char  stancia[50];
    char  vremya[6];
    }vokzal[100];
 
struct Node   
 { int key;
   char  stancia[50];
   char  vremya[6];
   Node *l; 
   Node *r; 
 };
 
typedef Node* NodePtr;
void AddTree(NodePtr& t, int k, char st[50], char vr[6]);
void TreeOut( NodePtr t, int level=1 );
void TreeSearch(NodePtr t,int f);
void vvod(NodePtr t,int n);
 
void main()
{ NodePtr t;
  int n,f;
  //char ch1;
//  char s[50], *p1;
//p1=s;
//char v[5], *p2;
//p2=v;
  t = NULL;
 
//ДВА ВАРИАНТА ПЕРЕДАЧИ ПРИ ВТОРОМ ОШИБКА!!!
 
// vokzal[0].nomer = 10;
//  strcpy(vokzal[0].stancia, "Mogilev");
//  strcpy(vokzal[0].vremya, "16.25");
//AddTree(t, vokzal[0].nomer,vokzal[0].stancia,vokzal[0].vremya);
//  vokzal[1].nomer = 11;
//  strcpy(vokzal[1].stancia, "Mogilev");
//  strcpy(vokzal[1].vremya, "17.25");
//AddTree(t, vokzal[1].nomer,vokzal[1].stancia,vokzal[1].vremya);
//   vokzal[2].nomer = 15;
//  strcpy(vokzal[2].stancia, "Mogilev");
//  strcpy(vokzal[2].vremya, "18.25");
//AddTree(t, vokzal[2].nomer,vokzal[2].stancia,vokzal[2].vremya);
//  vokzal[3].nomer = 9;
//  strcpy(vokzal[3].stancia, "Mogilev");
//  strcpy(vokzal[3].vremya, "15.25");
//AddTree(t, vokzal[3].nomer,vokzal[3].stancia,vokzal[3].vremya);
//  vokzal[4].nomer = 5;
//  strcpy(vokzal[4].stancia, "Minsk");
//  strcpy(vokzal[4].vremya, "10.00");
//AddTree(t, vokzal[4].nomer,vokzal[4].stancia,vokzal[4].vremya);
//  vokzal[5].nomer = 18;
//  strcpy(vokzal[5].stancia, "Minsk");
//  strcpy(vokzal[5].vremya, "5.25");
//AddTree(t, vokzal[5].nomer,vokzal[5].stancia,vokzal[5].vremya);
 
fp=fopen("data.dat", "rb");
fread(vokzal,sizeof(vokzal),1,fp);
fclose(fp);
for(n=0; vokzal[n].nomer && n<100; ++n){ 
AddTree(t, vokzal[n].nomer,vokzal[n].stancia,vokzal[n].vremya);
}
 
char ch;
printf("1. Vvod dannix \n");
printf("2. Vivod dereva \n");
printf("3. Poisk poezda po nomery \n");
printf("4. Poisk poezdov po stancii naznacheniya \n");
printf("5. Vixod \n");
do{
ch = getche();
switch(ch){
case '1':
printf("\n");
vvod(t,n);
n=n+1;
break;
case '2':
printf("\n");
TreeOut( t );
break;
case '3':
printf("\n");
printf("Vvedite nomer poezda: ");
scanf("%d", &f);
TreeSearch(t,f);    
break;
case '4':
printf("\n");   
exit(0);
break;
case '5':
fp=fopen("data.dat", "wb");
fwrite(vokzal,sizeof(vokzal),1,fp);
fclose(fp);
exit(0);
break;
}
}while (ch!='5');
  
 
//  cout <<"vvedite 4isla,  konec- Ctrl+Z: ";
 // while ( cin >>e ) AddTree(t, e); 
  //cout <<endl;  
// TreeOut( t );
   
}
 
 
void vvod(NodePtr t,int n)
{
int e;
char s[50], *p1;
p1=s;
char v[6], *p2;
p2=v;
printf("Vvedite nomer poezda: ");
  scanf("%d", &e);
  printf("Vvedite stanciiu naznacheniya: ");
  while((*p1++ = getchar())!= '\n') ;
  *p1 = '\0';
  scanf("%s", &s); 
  printf("Vvedite vremya otpravleniya: ");
  while((*p2++ = getchar())!= '\n') ;
  *p2 = '\0';
  scanf("%s", &v);
  vokzal[n].nomer = e;
  strcpy(vokzal[n].stancia, s);
  strcpy(vokzal[n].vremya, v);
AddTree(t, vokzal[n].nomer,vokzal[n].stancia,vokzal[n].vremya);
}
 
 
 
void AddTree(NodePtr& t, int k, char st[50], char vr[6]) 
 
{ if (t == NULL)  
   { t = new Node; t->l = NULL; t->r = NULL; t->key = k; t->stancia[50] = st[50]; t->vremya[6]=vr[6];}
   else                         
    { if (k >=  t->key) AddTree(t->r, k,st,vr);  
 
//КАК ТОЛЬКО СЮДА ИЗ ФАЙЛА ПЕРЕДАЁТСЯ АРГУМЕНТ С МЕНЬШИМ key СРАЗУ ОШИБКА, НЕ ИЗ ФАЙЛА ВСЁ НОРМ...
 
      if (k <  t->key) AddTree(t->l, k,st,vr);   
    }
}
 
void TreeOut( NodePtr t, int level ) 
{ int tab = 3; 
 
  if (t == NULL) cout <<"Derevo pusto \n";
   else
    { if (t->r != NULL) TreeOut(t->r, level+1);
                            
      cout <<setw(tab*level) <<t->key <<endl;
      if (t->l != NULL) TreeOut(t->l, level+1);
    }
}
 
void TreeSearch( NodePtr t, int find) 
{ if (t == NULL) cout <<"Poezda s dannim nomerom net \n";
   else
    { 
        if (t->key==find) {
        cout <<"Poezd naiden \n";
        cout <<t->key <<endl;
        cout <<t->stancia <<endl;
        cout <<t->vremya <<endl;
        }
        else 
        {
        if (t->key>find) TreeSearch(t->l, find);
                        
        else TreeSearch(t->r, find);
        }
    
}
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2009, 00:00
Ответы с готовыми решениями:

Ошибка Access violation при передаче указателя в функцию
выделяю память для нужд програмных и соханяю его. char *resadres =(char*) VirtualAlloc (0,...

Ошибка в процессе дебагинга при формировании библиотеки
В процессе дебагинга проекта, который генерирует библиотеку (для фотошопа), вылетает ошибка: ...

Ошибка при передаче параметров в функцию. Объясните, ребят, пожалуйста, в чем ошибка
Есть функция, которую необходимо отобразить в виде линий уровня. Далее с помощью простого...

Ошибка при передаче в функцию
Хочу передать в функцию строку и там ее заполнить, подчеркивает void karta(MyStruct s.karta,int...

Ошибка при передаче аргументов в функцию
Есть функция определения минимального значения: float minimum(float x,float y) { x = (x&lt;y)? x...

3
Rififi
2364 / 1057 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
04.12.2009, 00:40 2
slrvsp,

Unhandled exception at 0x00411d29 in test.exe: 0xC0000005: Access violation reading location 0x0000000b.

1. запусти программу в отладчике - он покажет тебе место падения
2. познакомься с макросом assert
0
slrvsp
1 / 1 / 0
Регистрация: 19.11.2009
Сообщений: 15
04.12.2009, 00:45  [ТС] 3
Я знаю место падения, но там где должен быть нулл, какого то фига 0x0000000b почему?
0
slrvsp
1 / 1 / 0
Регистрация: 19.11.2009
Сообщений: 15
04.12.2009, 19:28  [ТС] 4
Люди помогите кто плиз, горююююю....

Добавлено через 1 час 49 минут
Спасибо разобрался сам.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2009, 19:28

Ошибка при передаче параметра в функцию
В ДЗ есть пример кода, помогите пожалуйста исправить, до работающего варианта (VS2015). Ошибки:...

Ошибка при передаче двумерного массива в функцию
Помогите пожалуйста, никак не могу разобраться. Я хочу чтобы функция createBlankGameField() ввела...

Ошибка при передаче в функцию указателя на структуру.
Всем привет! Пишу программку по структурам. При передаче указателя на структуру в функцию выбивает...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru