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

Сортировки. Проблемы с памятью - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ динамическое приведение полиморфных объектов http://www.cyberforum.ru/cpp-beginners/thread357342.html
Есть иерархия классов Shape: 1. TwoDimensionalShape: circle, triangle, rectangle 2. ThreeDimensionalShape: sphere, cube, tetrahedron У shape есть чисто виртуальная функция getArea, тоже самое у TwoDimensionalShape, а у ThreeDimensionalShape есть еще и getVolume. Так вот вопрос: как в цикле распечатать объекты, на которые указывают элементы вектора указателей Shape, чтобы для...
C++ Найти сумму чисел, не делящихся на 2 и 11 Дана последовательность натуральных чисел {Aj} не более 20 элементов. Найти сумму чисел, не делящихся на 2 и 11, наибольшее из таких чисел, и номер этого числа в последовательности. http://www.cyberforum.ru/cpp-beginners/thread357337.html
Определение границ типов данных C++
Задача такова. Требуется определить максимальные границы для основных типов данных, т.е. int, double, char, float. Вот набросал, в принципе все работает, но препод сказал, что можно загнать все в какую-то функцию size of или как-то так и получится универсальная программа. Подскажите как это можно исправить. #include <iostream> using namespace std; int main() { int i, N, a;
C++ Создание динамического массива в структуре
Здравствуйте уважаемые форумчане. Вот код моей структуры- в будущем это динамический стек(без использования классов). Почему у меня не получается выделить память для значения stack->value. Компилятор пишет Unit1.cpp(26): E2034 Cannot convert 'int *' to 'int' struct St { int value; int kol; int gol; } ; //------------------------------ //------------------------------
C++ Логистические выражения ветвления http://www.cyberforum.ru/cpp-beginners/thread357320.html
Доброго всем вечера! Опять очень нужна помощь уважаемых форумчан :) 1) Поле шахматной доски определяется парой натуральных чисел (номер вертикали – номер горизонтали) из диапазона 1-8. На поле (k, l) стоит слон, на поле (m, n) – конь. Определить, бьет ли слон коня, конь – слона или фигуры не угрожают друг другу. 2) Вычислить значение выражения (A & В) ^ С, где А – порядковый номер цифры...
C++ Задача о пяти ферзях Добрый Вечер!!:) Помогите Пожалуйста решить задачу: Найдите такую расстановку пяти ферзей на шахматной доске, при которой каждое поле будет находиться под ударом одного из них. Использовать рекурсию. подробнее

Показать сообщение отдельно
Crown-Clown
2 / 2 / 0
Регистрация: 28.12.2010
Сообщений: 31

Сортировки. Проблемы с памятью - C++

27.09.2011, 23:02. Просмотров 354. Ответов 9
Метки (Все метки)

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
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
 
unsigned int count;
struct stack {int left;
    int right;}st[1000];
void Input(int *k, int n)
{
    int i;
    for(i=0; i< n; i++)
        *(k+i) = rand()%100-50;
}
 
 
void Bubble(int *k, int n,int pr)
{
int vsp;
int t = 1;
while(t)
{
t = 0;
for(int i = 0; i < n-1; ++i)
{
count++;
if( pr && (k[i] > k[i+1]) || !pr && (k[i] < k[i+1]))
{
vsp = k[i]; k[i] = k[i+1]; k[i+1] = vsp;
t = 1;
}
}
}
}
 
 
 
 
void Save(int *k, int *l, int n)
{
    int i;
    for(i=0; i< n; i++)
        *(k+i) = *(l+i);
}
void Hoar(int *k, int n)
{
// нерекурсивную
  int i,j,m,vsp,s,r;
  int l = 0; 
  s=l; st[l].left = 0; st[l].right = n-l;
  do
  {
    l = st[s].left;r = st[s].right; s--;
    do
    {
        i = l; j = r; vsp = k[(l+r)/2];
        do
        {
            while(k[i]< vsp) {i++;count++;};
            while(vsp < k[j]) {j--;count++;};
            if(i <= j)
            {m=k[i];k[i]= k[j];k[j]=m;i++;j--;}
        } while(i<j);
        if(i<r) {s++; st[s].left=i;st[s].right = r;}
        r = j;
       }while(l<r);
     }while(s);
}
 
void Shake(int *k, int n)
{
// шейкерная
 int j,vsp,left = 1,right = n-1,m = n-1,count=0;
 do
 {
     for(j = right;j>left;j--,count++)
         if(k[j-1]>k[j])
         { vsp = k[j];k[j]=k[j-1];k[j-1]=vsp;m=j;}
     left = m+1;
     for(j=left;j<=right;j++,count++)
            if(k[j-1]>k[j])
            {vsp = k[j];k[j]=k[j-1];k[j-1]= vsp; m=j;}
     right = m-1;
  } while(left<right);
  
}
 
 
void BubbleN(int* k, int n)
{
    int i, j, vsp;
    count = 0;
    for(i=0;i<n;i++)
        for(j=n-1;j>i; j--, count++)
            if(*(k+j)<*(k+j-1))
            {
                vsp = *(k+j);
                *(k+j) = *(k+j-1);
                *(k+j-1) = vsp;
            }
}
 
int sort_function_p(const void *a, const void *b)
{
    count++;
    if( *((int*)a) >*((int*)b) ) return 1;
    if( *((int*)a) <*((int*)b) ) return -1;
    return 0;
}
int sort_function_o(const void *a, const void *b)
{
    count++;
    if( *((int*)a) <*((int*)b) ) return 1;
    if( *((int*)a) >*((int*)b) ) return -1;
    return 0;
}
 
int main()
{
    int *N, *M,*l, i;
    int k[4] ={1000, 1800, 10000, 50000};
    srand(time(0));
    for(i=0; i < 4; i++)
    {
        N = new int [k[i]];
        M = new int [k[i]];
        if(N==NULL||M==NULL) 
        {
            printf("Error - memory!\n");
            return 1;
        }
        Input(M, k[i]);
        Save(N, M, k[i]);
        count = 0;
        BubbleN(N, k[i]);
        printf("BN[%d] = %10d ", k[i], count);
        count = 0;
        Bubble(N, k[i],1);
        printf("BSP[%d] = %10d ", k[i], count);
        count = 0;
        Bubble(N, k[i],0);
        printf("BSO[%d] = %10d\n", k[i], count);
        Save(N, M, k[i]);
        count = 0;
        qsort((void*)N, k[i], sizeof(int), sort_function_p);
        printf("QN[%d] = %10d ", k[i], count);      
        count = 0;
        qsort((void*)N, k[i], sizeof(int), sort_function_p);
        printf("QSP[%d] = %10d ", k[i], count); 
        count = 0;
        qsort((void*)N, k[i], sizeof(int), sort_function_o);
        printf("QSO[%d] = %10d\n", k[i], count);
        Save(N, M, k[i]);
        count = 0;
        Hoar(N,k[i]);
        printf("HN[%d] = %10d ", k[i], count);  
            
        delete [] N;
        printf("\n\n");
 
    }
    getch();
    return 0;
}
Ошибка :
HEAP CORRUPTION DETECTED: AFTER nORMAL BLOCK (#57) at 0x00672FE0.
CRT detected that the application wrote to memory after end of heap buffer.

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
void Hoar(int *k, int n)
{
// нерекурсивную
  int i,j,m,vsp,s,r;
  int l = 0; 
  s=l; st[l].left = 0; st[l].right = n-l;
  do
  {
    l = st[s].left;r = st[s].right; s--;
        do
        {
                i = l; j = r; vsp = k[(l+r)/2];
                do
                {
                        while(k[i]< vsp) {i++;count++;};
                        while(vsp < k[j]) {j--;count++;};
                        if(i <= j)
                        {m=k[i];k[i]= k[j];k[j]=m;i++;j--;}
                } while(i<j);
                if(i<r) {s++; st[s].left=i;st[s].right = r;}
                r = j;
           }while(l<r);
     }while(s);
}
Где-то тут
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru