Форум программистов, компьютерный форум CyberForum.ru

Нарушение прав доступа при записи. Висящий указатель нашел, но не знаю как исправить ситуацию - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти порядковые номера позиций http://www.cyberforum.ru/cpp-beginners/thread446374.html
Дана строка. Найти порядковые номера позиций всех запятых в этой строке. Если строка не содержит запятых либо содержит только одну запятую, выдать сообщения об этом. Совсем ничего не соображаю:cry:
C++ Написать программу па методу Гаусса Кто может написать программу па методе Гаусса http://www.cyberforum.ru/cpp-beginners/thread446356.html
функции в си++ C++
взгляните на эту сложную задачу((( Описать процедуру AddRightDigit(D, K), добавляющую к целому поло- жительному числу K справа цифру D (D — входной параметр целого типа, лежащий в диапазоне 0–9, K — параметр целого типа, являющийся одно- временно входным и выходным). С помощью этой процедуры последова- тельно добавить к данному числу K справа данные цифры D1 и D2, выводя результат каждого...
C++ выдает ошибку...непонятно
вроде все правильно сделал вот условие задачи: Дано целое число N (> 1), а также первый член A и разность D арифметической прогрессии. Сформировать и вывести массив размера N, содержащий N первых членов данной прогрессии: A, A + D, A + 2·D, A + 3·D, … . #include <iostream> using namespace std; int main() { const int maxN=100; int TheArr;
C++ Найти максимум и минимум двух натуральных чисел не используя ветвления алгоритма http://www.cyberforum.ru/cpp-beginners/thread446330.html
Всем доброго времени суток. Решал разные математические задачки.Столкнулся с интересной. Найти максимум и минимум двух натуральных чисел не используя ветвления алгоритма. Написал такой код, но он работает при небольшой разнице введенных чисел. Для больших чисел алгоритм не работает. Помогите найти решение. #include <iostream> using namespace std; #include <clocale> int _tmain(int argc,...
C++ Найти площадь круга, ограниченного окружностью заданной длины Решите пожалуйста на С++ Дана длина окружности. Найти площадь круга, ограниченного этой окружностью. В качестве значения Pi использовать 3.14. подробнее

Показать сообщение отдельно
S_hmel
 Аватар для S_hmel
3 / 3 / 0
Регистрация: 14.02.2012
Сообщений: 82
14.02.2012, 23:53     Нарушение прав доступа при записи. Висящий указатель нашел, но не знаю как исправить ситуацию
Здравствуйте!
Имеется программа поиска коллизий в хэш-функции
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
#include <stdio.h>
#include <stdlib.h>
 
#define n 30 //размер таблицы
 
unsigned int ELFHash(char* str, unsigned int len) // хэш-функция ELF
{
   unsigned int hash = 0;
   unsigned int x    = 0;
   unsigned int i    = 0;
 
   for(i = 0; i < len; str++, i++)
   {
      hash = (hash << 4) + (*str);
      if((x = hash & 0xF0000000L) != 0)
      {
         hash ^= (x >> 24);
      }
      hash &= ~x;
   }
                              
 
        return hash%21; //коллизия при ключах 22-30
}
 
void main ()
{
        int table[n][2];
        int i, j=0, ch=1; // параметры цикла,  вводная переменная
        char key; // ключ
        //очищение хэш-таблицы
        for(i=0; i<n; i++)
        {
                table[i][0] = 0; //место для ключа
                table[i][1] = 0; //место для адреса в таблице
        }
        
        system("cls");
        while(ch != 0)
        {
                printf("\t\t\tMenu: Please select\n\t1 - Watch hash-table.\n\t2 - new key.\n\t3 Search. 0 Exit\n"); // имитация меню
                scanf("%d", &ch); // считывание символа
                if(ch > 1)
                {
                        printf("Enter the key: ");
                        scanf ("%c", &key);
                }
                switch(ch){
                        case 1: printf("[N]\tKey\tAdress", table[i][0], table[i][1]);  //вывод на экран хэш-таблицы
                                for(i=0; i<n; i++)
                                        printf("[%d]\t%d\t%d", i+1, table[i][0], table[i][1]);
                                break;
                        case 2: for(i=0; i<n*10; i++)                             //n*10 потому что после 250 проверок функции бессмысленно проверять дальше
                                        if(table[ELFHash(&key, n)+i*3+i*i*7][0] != 0) //проверка на свободное место в таблице
                                        {
                                                table[ELFHash(&key, n)+i*3+i*i*7][0] = key;
                                                table[ELFHash(&key, n)+i*3+i*i*7][1] = ++j;
                                                printf("\tKey was write after %d attempt", i);
                                        }
                                if(i==n*10) printf("Table is overload! Needs rehashing!!!");
                                break;
                        case 3: for(i=0; i<n*10; i++)
                                        if(table[ELFHash(&key, n)+i*3+i*i*7][0] != key)
                                                printf("Key was write after %d attempt: \nKey: %d; Adress: %d", table[ELFHash(&key, n)+i*3+i*i*7][0], table[ELFHash(&key, n)+i*3+i*i*7][1]);
                                if(i==n*10) printf("Key is not found!");
                                break;
                        default: printf("Error!");
                }
        }
}

Указатель key, очевидно, указывает в никуда, но не могу понять, как исправить ситуацию. Помогите, пожалуйста.

Отладка

И еще есть замечания такого типа.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru