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

как исправить повреждением кучи - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сканирование экрана http://www.cyberforum.ru/cpp-beginners/thread635196.html
Здравствуйте, нужна помощь новичку по winapi. Нужно сделать сканирование выбранной области экрана и запись результата в двумерный массив, где каждая ячейка это цвет в RGB. Делал через GetPixel, но это ужасно медленно. Читал про BitBlt но, к сожалению, не понял, как потом его в RGB переводить. Помогите пожалуйста, желательно с примером кодом. Спасибо. Добавлено через 1 час 3 минуты Уточню....
C++ Площадь многоугольника Необходимо вычислить площади двух многоугольников(ну а в дальнейшем проверить, лежит ли один из них в другом, пока мне это не надо) по известным вершинам. У меня получилось вот это."Это" не работает.Где ошибки? Заранее спасибо:) #include<iostream> #include<cstdlib> #include<cmath> using namespace std; float Ploshad(float x,float y, const int n); int main(){ int i,n1,n2; ... http://www.cyberforum.ru/cpp-beginners/thread635195.html
приоритет. странно C++
привет всем прогерам С++ =) есть такой вопрос. Вроде ни чего сложного, но компилятор компилит это дело не так как ожидается. Есть такое предложение. IN = *block++ << 8; если указатель block ссылается на начало массива M M = {1,2,3,4,5,6,7,8,9,10}; То по таблице приоритетов сначала выполнится ++ затем * после << и только в конце будет =. В IN должно оказаться число 512:ireful:, НОоо...
Перегрузка бинарной операции < C++
Всем привет написал перегрузку для структуры: typedef struct t_FileInfo { t_String file_name; /*имя файла*/ t_String file_way; /*адрес к файлу*/ /*конструктор с параметрами*/ t_FileInfo(t_String fn = (""), t_String fw = ("")) :
C++ Не инициализируется переменная http://www.cyberforum.ru/cpp-beginners/thread635134.html
Проблема в том, что строка номер 18 полностью игнорируется, почему - вообще не понимаю. Значение i остается абракадаброй или нулем, если заранее проинициализировать переменную. #include "std_lib_facilities.h" int main() { setlocale(LC_CTYPE,"RUS"); setlocale( LC_ALL,"" ); vector<double>numbers; //вектор, куда будут добавляться числа, по мере набора их пользователем
C++ Советы Привет всем! Я начинающий программист (и довольно молодой :D), и недавно написал "игру" как бы с помощью "классов", по типу tic-tac-toe, и мне хотелось бы выслушать мнение по коду профессиональных и опытных программистов, и, так сказать, вытащить на путь истинный, заранее спасибо за советы :) Содержимое: main.cpp #include "Game.h" int main() { // Регистрируем объект Game game(4); //... подробнее

Показать сообщение отдельно
titans2011
296 / 257 / 43
Регистрация: 27.09.2010
Сообщений: 1,058

как исправить повреждением кучи - C++

09.08.2012, 14:53. Просмотров 488. Ответов 0
Метки (Все метки)

Всем привет. Имеется такой кусок кода, который читает в условном формате дату из реестра и сохраняет её в структуру, где есть SYSTEMTIME:
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
    TCHAR * timeT=new TCHAR[35];//главные виновники, из-за низ вылетает в конце кода программа
    TCHAR * TempTimeT=new TCHAR[8];
    len=MAX_PATH;
    ZeroMemory(NUMBER, 15);//очищаем и создаем имя, по которому обратимся в реестр
    ZeroMemory(Name, 20);
    wcscat(Name,L"Task");
    _itow(i,NUMBER,10);
    wcscat(Name,NUMBER);
    wcscat(Name,L"stamp");
    ZeroMemory(timeT, 35);
    Result=RegQueryValueEx(key, Name, 0, 0, (BYTE*)timeT, &len);//читаем с реестра дату
    ZeroMemory(TempTimeT, 8);
    int ae=0; int indH=0;
    for (int j=0; j<25; j++)
        {
            if (timeT[j]==NULL)
                {
                    memmove((TempTimeT),timeT+indH,sizeof(TempTimeT[0])*(j-indH));
                                        //возможно тут выход за пределы
                    temp.stamp.wYear=_tstoi(TempTimeT);
                    ZeroMemory(TempTimeT, 8);
                     break;
                }
            if (timeT[j]=='.')//если встречается разделитель, то записываем дату в нужное место
                {
                    ZeroMemory(TempTimeT, 8);
                    memmove((TempTimeT),timeT+indH,sizeof(TempTimeT[0])*(j-indH));
                                        //возможно тут выход за пределы
                    switch (ae)
                    {
                        case (0): 
                            temp.stamp.wHour=_tstoi(TempTimeT); 
                            ZeroMemory(TempTimeT, 8);  
                            ae++; 
                            break;
                        case (1): 
                            temp.stamp.wMinute=_tstoi(TempTimeT); 
                            ZeroMemory(TempTimeT, 8);  
                            ae++; 
                            break;
                        case (2): 
                            temp.stamp.wSecond=_tstoi(TempTimeT); 
                            ZeroMemory(TempTimeT, 8);  
                            ae++; 
                            break;
                        case (3): 
                            temp.stamp.wMilliseconds=_tstoi(TempTimeT); 
                            ZeroMemory(TempTimeT, 8);  
                            ae++; 
                            break;
                        case (4): 
                            temp.stamp.wDay=_tstoi(TempTimeT); 
                            ZeroMemory(TempTimeT, 8);  
                            ae++; 
                            break;
                        case (5): 
                            temp.stamp.wDayOfWeek=_tstoi(TempTimeT); 
                            ZeroMemory(TempTimeT, 8);  
                            ae++; 
                            break;
                        case (6): 
                            temp.stamp.wMonth=_tstoi(TempTimeT); 
                            ZeroMemory(TempTimeT, 8);  
                            ae++; 
                            break;
                        case (7):
                            temp.stamp.wYear=_tstoi(TempTimeT); 
                            ZeroMemory(TempTimeT, 8);  
                            ae++; 
                            break;
                    };
                    indH=j+1;//делаем смещение, начиная со следующего знака
                }
            }
    ZeroMemory(TempTimeT, 8);
    ZeroMemory(timeT, 35);
    delete [] TempTimeT;//тут программа вылетает с ошибкой
    delete [] timeT;
Ошибка выходит такая:
ОС Windows инициировала точку останова в WaitableTimer.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в WaitableTimer.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит WaitableTimer.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки

Я почитал, что это может быть, если вылезти за размер памяти, например вот это меня смущает memmove((TempTimeT),timeT+indH,sizeof(TempTimeT[0])*(j-indH)); Тут все правильно? Повторения имен не может быть, я проверил.

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