Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/163: Рейтинг темы: голосов - 163, средняя оценка - 4.57
Rgs
0 / 0 / 0
Регистрация: 16.09.2015
1

Run-Time Check Failure #2 - Stack around the variable 'dht' was corrupted

20.02.2010, 22:02. Просмотров 31965. Ответов 3
Метки нет (Все метки)

Всем доброго времени суток! Недавно начал программировать на C в среде Microsoft Visual C++. Написал программу, но всё время вылазит одна и так же ошибка: Run-Time Check Failure #2 - Stack around the variable 'dht' was corrupted. Не могу понять в чём дело, уже много часов сижу над этой проблемой. Читал в интернете, там писали что вроди как вышел за пределы чего-то, только вот чего не понятно. Помогите скажите в чём ошибка. Код программы:

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#include <stdio.h>
#include <stdlib.h>
#include <TPerfMeter.h>
#define size 10000
struct tan {
    char ak[14];
    char pl[14];
    int cl;
};
struct elem {
    tan data;
    elem *next;
};
enum bol {NO,YES};
void insert(tan el,elem *ht[],int s);
bol member(tan el,elem *ht[],int s);
void makenull(elem *ht[],int s) {
    int i;
    for (i=0;i<=s;i++)
        ht[i]=NULL;
}
void rebuild(elem *ht[],int s,elem *dht[]) {
    int i;
    elem *curr;
    for (i=0;i<=s;i++) {
        curr=ht[i];
        while (curr!=NULL) {
            insert(curr->data,dht,size*2-1);
            curr=curr->next;
        }
    }
}
int h(tan el,int s) {
    int i;
    int sum1=0,sum2=0;
    for (i=0;i<=14;i++) {
        sum1=sum1+el.ak[i];
        sum2=sum2+el.pl[i];
    }
    return ((sum1*sum2+el.cl)%s);
}
void insert(tan el,elem *ht[],int s) {
    int bucket;//номер сегмента
    elem *oldheader;
    if(!member(el,ht,s)) {
        bucket=h(el,s);
        oldheader=ht[bucket];
        ht[bucket]=new elem();
        ht[bucket]->data=el;
        ht[bucket]->next=oldheader;
    }
}
bol member(tan el,elem *ht[],int s) {
    elem *curr;
    curr=ht[h(el,s)];
    while (curr!=NULL) {
        if (curr->data.ak==el.ak) return (YES);
        else curr=curr->next;
    }
    return (NO);
}
elem *goe(tan el,elem *ht[],int s) {
    elem *curr;
    curr=ht[h(el,s)];
    while (curr!=NULL) {
        if (curr->data.ak==el.ak) return (curr);
        else curr=curr->next;
    }
    return (NULL);
}
void del(tan el,elem *ht[],int s) {
    int bucket=h(el,s);
    elem *curr;
    if (ht[bucket]!=NULL) {
        if (ht[bucket]->data.ak==el.ak)
            ht[bucket]=ht[bucket]->next;
        else {
            curr=ht[bucket];
            while (curr->next!=NULL) {
                if (curr->next->data.ak==el.ak) {
                    curr->next=curr->next->next;
                    return;
                }
                else curr=curr->next;
            }
        }
    }
}
void ini(elem *ht[],elem *dht[],tan *el) {
    makenull(ht,size-1);
    makenull(dht,size*2-1);
    int j;
    for (j=0;j<=14;j++) {
        el->ak[j]=rand()%122;
        el->pl[j]=rand()%122;
    }
    el->cl=rand()%10000;
}
double instime(int elc) {
    elem *ht[size-1];
    elem *dht[size*2-1];
    bol htf=NO,chk=NO;
    int i,n=0;
    tan el;
    TPerfMeter pm;
    double interv=0;
    ini(ht,dht,&el);
    for (i=0;i<=elc-1;i++) {
        if (htf==NO) {
            pm.Start();
            insert(el,ht,size-1);
            interv=interv+pm.Stop();
        }
        else if (chk==NO) {
            rebuild(ht,size-1,dht);
            chk=YES;
            pm.Start();
            insert(el,dht,size*2-1);
            interv=interv+pm.Stop();
        }
        else {
            pm.Start();
            insert(el,dht,size*2-1);
            interv=interv+pm.Stop();
        }
        n++;
        if (n>=2*size-1) htf=YES;
    }
    return (interv);
}
double goet() {
    elem *ht[size-1];
    elem *dht[size*2-1];
    int i;
    tan el;
    TPerfMeter pm;
    double interv=0;
    ini(ht,dht,&el);
    for (i=0;i<=size-1;i++) insert(el,ht,size-1);
    pm.Start();
    goe(el,ht,size-1);
    interv=pm.Stop();
    return interv;
}
double deltime() {
    elem *ht[size-1];
    elem *dht[size*2-1];
    int i;
    tan el;
    TPerfMeter pm;
    double interv=0;
    ini(ht,dht,&el);
    for (i=0;i<=size-1;i++) insert(el,ht,size-1);
    pm.Start();
    del(el,ht,size-1);
    interv=pm.Stop();
    return interv;
}
void tfp() {
    printf("Insert time 10 elements: %f\n",instime(10));
    printf("Insert time 100 elements: %f\n",instime(100));
    printf("Insert time 1000 elements: %f\n",instime(1000));
    printf("Insert time 10000 elements: %f\n",instime(10000));
    printf("Insert time 20000 elements(+rebuilding hash table): %f\n",instime(20000));
    printf("Delete one element time: %f\n",deltime());
    printf("Get one element time: %f\n",goet());
    getchar();
    getchar();
}
void main() {
    printf("1. Test for performance\n");
    printf("0. Exit\n");
    printf("Choose menu point: ");
    switch (getchar()) {
        case '1':tfp();
        case '0':break;
    }
}
Ошибка каждый раз после вызова функции instime().
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2010, 22:02
Ответы с готовыми решениями:

Run-Time Check Failure #2 - Stack around the variable 'y' was corrupted
Даны два строго упорядоченных по возрастанию массива X и Y из n элементов каждый. В массиве X найти...

Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted
Выдает ошибку &quot;Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.&quot;...

Run-Time Check Failure #2 - Stack around the variable '_continue_value' was corrupted
Пишу в VS 2015 и после запуска в конце появляется предупреждение Run-Time Check Failure #2 - Stack...

Ошибка Run-Time Check Failure #2 - Stack around the variable 'tmp' was corrupted
Вот функция где она возникает, validatino - функция проверки на корректность ввода , ...

Run-Time Check Failure #2 - Stack around the variable 'after' was corrupted при обращении к символу
Здравствуйте!!!Программа работает вроде бы правильно,но после отработки программы Я сталкиваюсь с...

3
insideone
Модератор
Автор FAQ
3668 / 945 / 114
Регистрация: 10.01.2010
Сообщений: 2,538
20.02.2010, 23:34 2
Цитата Сообщение от rgs Посмотреть сообщение
Читал в интернете, там писали что вроди как вышел за пределы чего-то, только вот чего не понятно
Да нет, тут то все как раз понятно.
elem *dht[size*2-1];
Вот у вас есть массив и все бы прекрасно, да только он не бесконечен. Вы в функции instime часто посылаете этот массив в другие функции а они там творят уже что хотят. Они же могут не расчитать и записать в него по индексу которого у него и нет. Вообще такие ошибки иногда достаточно трудно найти, особенно в чужом коде. Так что посторайтесь проглядеть все функции в которые посылается dht и следите как он там изменяется. 10-20 минут и вы точно обнаружите где выехали не туда
2
Rgs
0 / 0 / 0
Регистрация: 16.09.2015
21.02.2010, 00:22 3
Исправил, оказалось что в одном алгоритме за пределы массива вышел. Спасибо!
0
Mikoko
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 1
10.09.2016, 23:20 4
Капец, сидел тупил, прочел что тут написано и все решил. Спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2016, 23:20

Ошибка при вставке элемента в массив: "Run-Time Check Failure #2-Stack around the variable 'x' was corrupted."
Задача: Задан массив размерностью 10. Ввести число, которое необходимо записать под 5-им индексом,...

Считывание данных из файла. Run-time check failure #2 variable "i"
Результат выдает верный, но выскакивает эта ошибка. #include &lt;stdio.h&gt; main(void) { FILE...

Переполнение массива. Run-Time Check Failure #2
Добрый день. Я написал программу поиска всех циклов в ориентированном графе, но у меня ошибка ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru