Нужна помощь в решении ошибки в коде программы - вопрос №4126422
Проблема в том, что я подаю на IndexArr2 пустой массив типа List, который в функции заполняю данными из списка. Если запросить вывод внутри этой функции, все прекрасно отображается. Однако если запросить вывод после выполнения функции, в int main(), то программа выведет все значения, кроме первого — arr1[i].data.a. Будет выведен data.b, data.c, data.d, но вот a почему-то где-то теряется. Очень нужна ваша помощь.
Файл с базой данных по ссылке на облако. База данных
void ReadList(List **p, unsigned int &size) {
fstream *file = new fstream;
file->open(«testBase3.dat», ios::in | ios::binary);
record2 *data = new record2;
List *temp = *p = new List;
file->read((char *)data, sizeof(*data)).eof();
temp->data = *data;
size++;
while (!file->read((char *)data, sizeof(*data)).eof()) {
temp->next = new List;
temp = temp->next;
temp->data = *data;
size++;
}
temp->next = 0;
file->close();
}
void PrintList(List *head) {
List *p = head;
int j = 0;
int key;
int i = Page;
do {
system(«CLS»);
cout << endl;
for (; (j < i) && (p != 0); j++, p = p->next) {
cout.width(30);
cout << (j + 1) << ")"
<< " ";
PrintElems(p->data);
}
cout << endl;
cout.width(75);
cout << " <-- 1 || Exit 0 || 2 --> " << endl;
cin >> key;
if (key == 1) {
if (j != Page) {
i = i — Page;
j = i — Page;
p = head;
for (int f = 0; f < j; f++)
p = p->next;
}
} else if (key == 2) {
if (p != 0) {
i = i + Page;
}
} else if (key == 0) {
break;
}
} while (key != 0);
}
void DigitalSort(List **S) {
List **unSort = S;
int KDI[6];
for (int i = 0; i < 3; i++)
KDI[i] = i;
for (int i = 3; i < 6; i++)
KDI[i] = i + 28;
int L = 6;
List q[256];
List *p;
unsigned char d;
int k;
for (int j = L — 1; j >= 0; j--) {
for (int i = 0; i <= 255; i++) {
q[i].tail = (List *)&(q[i].head);
}
k = KDI[j];
while ((*unSort) != 0) {
d = (*unSort)->Digit[k];
q[d].tail->next = *S;
q[d].tail = *S;
(*unSort) = (*unSort)->next;
}
p = (List *)S;
for (int i = 0; i <= 255; i++) {
if (q[i].tail != (List *)&(q[i].head)) {
p->next = q[i].head;
p = q[i].tail;
}
}
p->next = 0;
}
}
void IndexArr(record2* &arr, List *p, unsigned int size) {
arr = new record2[size];
for (int i = 0; p != 0; p = p->next, i++)
arr[i] = p->data;
}
void IndexArr2(List* &arr, List *p, unsigned int size) {
arr = new List[size];
for (int i = 0; p != 0; p = p->next, i++) //{
arr[i].data = p->data;
//cout<<(*arr[i]).data.a<<endl; }
}
void Search(record2 * &arr, char * key, List * head, int n, int &size2){
List *p = head;
List *pred = new List;
int i=0;
int l=1;
int r=n;
int m;
char k[4];