Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 07:29   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию Неправильно работает вродебы правильный код

Приведу именно ту часть, где происходит хэширование и запись в модель памяти и основной класс:
Код:
typedef struct sData {
	wchar_t* Data;
	sData* pData;
} sData, *LPData;

class cHashTable
{
	private:
		sData Memory[10];
		DWORD Index;
		wchar_t* pNowData;
		DWORD DataToIndex (wchar_t* pInData);
	public:
		BOOL DataWrite (wchar_t* pInData);
		BOOL ShowData (TStringGrid** StringGrid);
		cHashTable ()
		{
			pNowData = NULL;
			Index = 0;
			MemReady = false;
		};
		~cHashTable ()
		{
			pNowData = NULL;
		};
};
Теперь исполняемый файл:
Код:
BOOL cHashTable::DataWrite (wchar_t* pInData)
{
	Index = DataToIndex (pInData);
	pNowData = pInData;
	if (Memory[Index].Data == NULL)
		Memory[Index].Data = pInData;
	return TRUE;
};

DWORD cHashTable::DataToIndex (wchar_t* pInData)
{
	DWORD Key = 0;
	unsigned char i = 0;
	while ((*pInData) != 0) {
		Key = ((*pInData) * pow ((double)10, (double)i)) + Key;
        pInData++;
	};
	Key = Key % 10;
	return Key;
};
Вот собственно такой малюсинький класс получился. По событию клика по кнопке я беру текст каждой строчки из ListBox и с помощью cHashTable::DataWrite записываю его в массив с индексом, получившемся при хешировании (массив - воображаемая память). И вот тут чудеса в решете какие-то! По окончанию работы алгоритма вывожу результаты в StringGrid и вижу там только одно какое-нибудь слово из ListBox'a, при отладке тоже самое - первый раз функция cHashTable::DataWrite проходит нормально, второй раз (я даже не знаю когда перезапись успевает случиться), но на второй раз в прошлом значении появляется нынешнее значение. Помогите разобраться. исходники на билдере прилагаю.
P.S. Однако, когда я делаю так cHashTable::DataWrite ("Что-нибудь") и вместо что-нибудь все двенадцать строк (т.е. вручную заполняю в коде), у меня всё впорядке, всё правильно записывается и отображается.
Можеь быть дело в самом ListBox? Хотя каждый раз когда я считал строку в буфер типа wchar_t* я вывожу результат, используя ShowMessage, да и в отладчике всё впорядке!
P.S. P.S. пишу в Embarcadero Studio 2010 windows 7
Вложения
Тип файла: zip Исходники проекта.zip (9.7 Кб, 10 просмотров)
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 25.04.2011 в 07:39.
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос работает неправильно AllenJ Microsoft Office Word 0 13.04.2011 21:17
Не могу подобрать правильный код Katte Общие вопросы C/C++ 2 08.06.2010 17:34
Код не всегда выдает правильный результат Maxx Microsoft Office Excel 2 18.02.2010 15:59
Правильный ли код? anomals PHP 4 10.02.2010 14:06
Копирование строк. Правильный ли код? LinuxUser Общие вопросы C/C++ 12 06.11.2007 17:33