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

Переполнение стека во время освобождения памяти - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как реализовать функции что бы найти синус, косинус, корень квадратный, степень от числа http://www.cyberforum.ru/cpp-beginners/thread1099994.html
Добрый вечер,разрабатываю калькулятор на winapi хотелось бы узнать как реализовать функции что бы найти синус,косинус,корень квадратный,степень от числа,буду благодарен если кто-то подскажет функции или поможет дописать,пишу в C++ Builder #include <windows.h> #include <windowsx.h> #include <stdio.h> #include <stdlib.h> #include <math.h> LRESULT CALLBACK WindowProcedure (HWND, UINT,...
C++ Проверка постановки ударения Совсем недавно увлекся программирование. Вспомнив, что до егэ оcталось всего ничего, решил озадачить себя и написать программку, которая будет проверять ударения в словах, как в задании a1. Но не успев толком начать, столкнулся с проблемой, что после ввода переменной b он выдаёт любой результат, который перечислен в строчках 16 -23. Уверен, что накосячил в операторе if:-|. Помогите разобраться. ... http://www.cyberforum.ru/cpp-beginners/thread1099993.html
Сырые строки в VS'12 C++
Добрый вечер. Попытался в VS'12 написать такую конструкцию: char* path_to_image = R"(C:\Short\Projects\OFBench\Media\TestExampleTwo.jpg)"; Пишет, что R - не объявленный идентификатор, ну и ругается на неизвестные последовательности. Здесь всё работает. В чем может быть проблема?
C++ Выведение vector-а из функции void*(c++)
Здравствуйте, помогите пожалуйста. Я создаю структуру : struct MemoryBlock { size_t offset; size_t size; }; далее я создаю вектор, который содержит некоторое кол-во объектов данной структуры :
C++ Перехват экспортной функции? http://www.cyberforum.ru/cpp-beginners/thread1099974.html
Здравствуйте. Есть модуль А и Б В модуле А, есть функция. В модуле Б нужно её перехватить. Как я понял, есть два пути. Можно хукнуть в модуле Б её доп. кодом по сигнатуре, оффсетом.., а есть второй и простой способ, вот я его не понимаю и хочу разобраться. Есть дээлка, от кторой нет сурс кода, но вторая дээлка просто ловит эту функцию:
C++ С++ Консольное приложение "Морской бой" Здравствуйте, форумчане! Я начал писать программу морской бой, пока что написал функции старта, выбора сложности, и выбора места под корабли, но уже возникла проблема. Я решил создать динамический буловский многомерный (10*10) массив, true - место занято кораблем, false - свободно. Он передается в функцию выбора места под корабли, и, если место занято, графически это будет показываться на... подробнее

Показать сообщение отдельно
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400

Переполнение стека во время освобождения памяти - C++

18.02.2014, 21:47. Просмотров 330. Ответов 5
Метки (Все метки)

Здравствуйте! СТолкнулся с такой проблемой, что при работе деструктора программа аварийно завершается, а в дебаггере появляется сообщение о том, что стек заполнен. Оказалось, что дело в освобождении памяти оператором delete. Я закомментировал, и все работает, правда с утечкой памяти. MVS 2010 C++ .
Детруктор:
C++
1
2
3
4
5
6
7
TUchenik::~TUchenik()
{
    if (HF!=NULL)       {DeleteObject(HF); HF=NULL;}
    if (DC!=NULL)       {DeleteObject(DC); DC=NULL;}
    if (Uchenik!=NULL)
    {delete []Uchenik; Uchenik=NULL;};
}
Место, где память выделяется:
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
void TUchenik::Jornal(void)
{
    if(Uchenik != NULL) {delete []Uchenik; Uchenik = NULL;};
    wifstream File;
    locale loc("rus_rus.1251");
    File.imbue(loc);
    File.open(NameOfFile);
    while(!File.eof())
    {
        
        File>>name; File>>surname; File>>klass; File>>bukva;
        if ((wcslen(name))==0) break;
        NNN++;
    }
    File.close();
    Uchenik =new TUchenik[NNN];
    File.open(NameOfFile);
    for (int i=0; i<NNN;i++)
    {
        File>>Uchenik[i].name;
        File>>Uchenik[i].surname;
        File>>Uchenik[i].klass;
        File>>Uchenik[i].bukva;
        if (wcslen(Uchenik[i].name)==0) 
            break;
    }
    File.close();
}


Функция главного окна (на всякий случай)
Кликните здесь для просмотра всего текста
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
LRESULT CALLBACK Glaw_Win(HWND Hwnd,UINT message,WPARAM wParam, LPARAM lParam)
{static TUchenik NameFile;
static RECT Rect = {0L}; //будем определять разммер рабочей области
static SCROLLINFO sinfo;
int off, tmp;
static int FlagPaint=0;
 
 switch(message)
         {
         case  WM_CREATE:
                  {  
                    GetClientRect(Hwnd,&Rect);
                    SetRect(&Rect,Rect.top+10, Rect.left+10, Rect.bottom-10, Rect.right-10);
                    NameFile.NameFile(HProg, Hwnd);
                    NameFile.Jornal();
                   break;}                                                             //подготовит файл настроек
 
         case  WM_PAINT:
                  { 
                     if (FlagPaint == 0) NameFile.ReadFile(Hwnd);  
                     if(FlagPaint==1) NameFile.FormTalon(Hwnd);
                   break;}
 
         case  WM_DESTROY:
                {
                    //NameFile.~TUchenik();
                    PostQuitMessage(0);
                break;}
 
         case  WM_COMMAND:
             {switch(LOWORD(wParam))
                 {
                     case IDM_PRAVKA:    { CreateChildWindow(); break; }
                     case IDM_LIST:      {FlagPaint = 0; InvalidateRect(Hwnd,NULL,1);break;}
 
                     case IDM_TALON:     {FlagPaint=1;  InvalidateRect(Hwnd,NULL,1);break;}
     
                     case IDM_SET_DATE:  {CreateDateWindow();break;}
                }
             break;} //close CASE of WM_COMMAND
    
             case WM_VSCROLL :
                {
                    sinfo.cbSize=sizeof(SCROLLINFO); //получаем размер структуры
                    sinfo.fMask = SIF_ALL; // Определяет параметры полосы прокрутки для установки или получения. Этот элемент может быть комбинацией следующих значений:
                    GetScrollInfo(Hwnd,SB_VERT, &sinfo);
                    off = sinfo.nPos;RECT rcUpdate;
                       switch (LOWORD (wParam))
                            {
                                case SB_THUMBTRACK:
                                sinfo.nPos = sinfo.nTrackPos;
                            break;
 
                                case SB_LINEUP:
                                    sinfo.nPos -= 2;
                                    ScrollWindowEx(Hwnd,0,15,&Rect,NULL,NULL,&rcUpdate,0 );
                                break;
 
                                case SB_LINEDOWN:
                                    sinfo.nPos += 2;
                                    ScrollWindowEx(Hwnd,0,-15,&Rect,NULL,NULL,&rcUpdate,0 );
                                break;
                             }
               
                       SetScrollInfo(Hwnd, SB_VERT,&sinfo,TRUE);
                       tmp=GetScrollInfo(Hwnd,SB_VERT,&sinfo);
                       GetClientRect(Hwnd,&Rect);
                       //ScrollWindowEx(Hwnd,0,1,&Rect,NULL,NULL,&rcUpdate,0 );
                       InvalidateRect(Hwnd,&rcUpdate,TRUE);
                       UpdateWindow(Hwnd);
                break;}
             default:{return(DefWindowProc(Hwnd,message,wParam,lParam));}
        }
 
    return 0L;
}



В чем ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru