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

Повреждение кучи - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Рекурсивная функция вычисления разрядности числа в двоичном виде http://www.cyberforum.ru/cpp-beginners/thread673016.html
Есть неработающий код: #include <iostream> using namespace std; unsigned char capacity (unsigned char number) { if (number == 0 || number == 1) return 1;
C++ Не могу собрать проект в exe (MVS2012) Использую mvs2012. Никак не могу понять, как собрать проект в готовый exe. Нажимал там всякие компиляции, сборки, отладку в режиме релиза. Потом заходил в папку компилятора в моих документах. Там искал exe своей проги в папках дебаг и релиз. Конечно на моем компе они(exe) запускаются. Но как только передаю этот экзешник кому-нибудь из друзей для проверки у них на компе - не запускается. Чувство,... http://www.cyberforum.ru/cpp-beginners/thread673014.html
C++ Файлы
freopen("rpq.in", "r", stdin); freopen("rpq.out", "w", stdout); К какому каталогу будет обращаться программа Vc++
C++ Время выполнения
Скажите, как я могу сравнить время выполнения 2 функций? Желательно сразу готовый код.
C++ Сортировка Шелла http://www.cyberforum.ru/cpp-beginners/thread673005.html
Скажите пожалуйста какой из вариантов лучше использовать для реализации сортировки Шелла? Второй вариант меня смущает тем, что там больше функций? Это сильно замедлит работу по сравнению с первым вариантом? 1 вариант: int increment(long inc, long size) { // inc массив, в которые заносятся инкременты // size размерность этого массива int p1, p2, p3, s;
C++/CLI WinForms Что значит эта строка this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);только пожалуйста расскажите подробно.Заранее спасибо подробнее

Показать сообщение отдельно
bytephone32
1 / 1 / 0
Регистрация: 08.08.2012
Сообщений: 21
17.10.2012, 04:30     Повреждение кучи
Task2.h

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
#ifndef _TASK2_H_
#define _TASK2_H_
 
#include <iostream>
 
using namespace std;
 
namespace TeamResult
{
    static int fieldCnt = 1;
 
    static double planPctMax;
    static double planPctMin;
    
    typedef struct TR
    {
        char day[32];
        double plan;
        double realDo;
    } FIELD;
 
    typedef TR* DATABASE;
 
    DATABASE CreateTable ( void );
 
    void AddField ( DATABASE );
 
    void ShowTable ( DATABASE );
 
    void SortTable ( DATABASE );
 
    void DeleteTable ( DATABASE );
};
 
 
#endif _TASK2_H_


Task1.cpp

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
#include "Task2.h"
 
#include <memory>
 
TeamResult::DATABASE TeamResult::CreateTable ( void )
{
    return ( DATABASE ) malloc ( sizeof ( TR ) );
}
 
void TeamResult::AddField ( DATABASE db )
{
    puts ( "Input day: " );
    scanf ( "%s", &( db + fieldCnt - 1 )->day );
    puts ( "Input plan: " );
    scanf ( "%f", &( db + fieldCnt - 1 )->plan );
    puts ( "Input actual output: " );
    scanf ( "%f", &( db + fieldCnt - 1 )->realDo );
 
    double planPct = (
        ( db + fieldCnt - 1 )->plan ) /
        ( ( db + fieldCnt - 1 )->realDo ) * 100;
 
    if ( fieldCnt == 1)
    {
        planPctMax = planPct;
        planPctMin = planPct;
    }
    else 
    {
        if ( planPctMax < planPct ) 
            planPctMax = planPct;
        if ( planPctMin > planPct )
            planPctMin = planPct;
    }
 
    db = ( DATABASE ) realloc ( db, ( ++fieldCnt ) * sizeof ( FIELD ) );
}
 
void TeamResult::ShowTable ( DATABASE db )
{
    for ( int i = 0; i < fieldCnt - 1 ; ++i)
        cout<<( db + i )->plan<<endl;
}
 
void TeamResult::SortTable ( DATABASE db )
{
    for(int i = 0; i < fieldCnt - 1; ++i)
        for(int j = i + 1; j < fieldCnt - 1; ++j)
            if( ( ( db + i )->plan) > ( ( db + j )->plan) )
            {
                DATABASE tmp = new FIELD;
                memcpy ( tmp, ( db + i ), sizeof ( FIELD ) );
                memcpy ( ( db + i ), (db + j), sizeof ( FIELD ) );
                memcpy ( ( db + j ), tmp, sizeof ( FIELD ) );
                delete tmp;
            }
}
 
void TeamResult::DeleteTable ( DATABASE db )
{
    free ( db );
}


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
#include "Task2.h"
 
using namespace TeamResult;
 
int main()
{
 
    DATABASE db;
 
    db = CreateTable ( );
 
    AddField ( db );
 
    AddField ( db );
 
/////////////////////////////////////////
 
    AddField ( db );
 
    SortTable ( db );
 
    ShowTable ( db );
 
    DeleteTable ( db );
 
    system ( "pause" );
 
    return 0;
}
После второго раза вызова функции "ОС инициализировала точку останова", которая вызвана повреждением кучи.
C++
1
    db = ( DATABASE ) realloc ( db, ( ++fieldCnt ) * sizeof ( FIELD ) );
Как этого можна избежать?

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