При добавлении элемента в список, изменяется переменная k, причём иногда программа отрабатывает правильно k всегда равно пяти. Но по каким-то причинами она становится равной 7, потом 9. В конечном результате должны в массив добавляться слова, но если у них одинаковый хеш, то они добавляются в список.
#include "stdafx.h"
#include <iostream>
using namespace std;
struct Lib
{
char word[50];
Lib *next;
};
void Print(Lib **array,int n);
void Search(Lib obj[], int n);
void Push(Lib **array, char s[], int hesh);
void main()
{
setlocale(LC_ALL, "Russian");
int b = 5, k;
cout << "Введите количество слов:";
cin >> k;
Lib *array = NULL;
int hesh;
char s[50];
for (int i = 0; i < k ; i++)
{
hesh = 0;
cout << "Введите слово:" << endl;
cin >> s;
for (int j = 0; j < strlen(s); j++)
{
hesh += (int)s[j] + 3;
}
while (hesh > b - 1)
{
hesh = hesh - 5;
}
cout << hesh << endl;
Push(&array,s, hesh);
}
//Print(&array, b);
system("pause");
}
void Push(Lib **array, char s[], int hesh) {
Lib *el = new Lib;
strcpy_s(el->word, s);
el->next = *(array+hesh);
*(array + hesh) = el;
}
Lib *array = NULL;
После этого
Push(&array,s, hesh);
а в ней
*(array + hesh) = el;
Т.е. вы по сути просто портите стек рядом с array
, записывая не пойими куда значение el
- в том числе, вероятно, и в место в памяти, занимаемое переменной k
.
Для начала нужно выделить память для array
, а потом - с учетом того, что в Print
вы передаете адрес переменной - еще и использовать выражение типа (*array+hesh)
, а не (array+hesh)
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно, чтобы вычисленные в функции Min_Max значения адресов min и max сохранялись и передавались в функцию CountА функция Count должна считать элементы...
Для вывода объекта класса string с помощью printf можно воспользоваться методом c_str()
Нужно написать реализацию метода шаблонного класса List для простых типов данных и строк(сhar*), которая будет загружать список с csv файлаНаписал,...