При добавлении элемента в список, изменяется переменная 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).
Сборка персонального компьютера от Artline: умный выбор для современных пользователей