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

Run-Time Chack Failure #2 - Stack around the variable "lpBuf" was corrupted - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ A star алгоритм (A*) http://www.cyberforum.ru/cpp-beginners/thread586583.html
Вот уже несколько часов ищу рабочий код алгоритма А*, информации действительно море. Но почти вся, что нашел, содержит описание самого алгоритма, как он действует, и как увеличить его скорость и эффективность. Но вот кода на С++ которой программы, которая в массиве ищет путь от от одной до другой ячейки ни как не могу найти. Может кто подскажет?
C++ Хешированный список Все привет! Как реализовать в основной памяти хешированный список? http://www.cyberforum.ru/cpp-beginners/thread586566.html
C++ Смоделировать бросание каждым из двух игроков трех игральных кубиков
Смоделировать бросание каждым из двух игроков трех игральных кубиков.Определить ,кто из игроков получил большую сумму очков. ПОМОГИТЕ!
Много файловая программа ошибки при компиляции C++
Вроде всё правильно делаю но не работает. Ниже интерфейсы приведены! func.cpp #include"resurse.h" void put(int x) { std::cout<<x<<std::endl;
C++ Массивы: найти сумму, произведение, среднее арифметическое всех чисел массива http://www.cyberforum.ru/cpp-beginners/thread586545.html
1.Задано число X.Сформировать массив, состоящий из Х элементов по правилу Ai=x/i. Найти сумму, произведение, среднее арифметическое всех чисел массива. Вывести на экран контрольные значения. 2.Задано число N. Сформировать матрицу А размером N на N из случайных чисел. Найти кол-во четных, нечетных элементов,сумму всех чисел матрицы. Вывести на экран контрольные значения. 3. Задано число...
C++ Найти в текстовом файле одинаковые слова и вывести количество повторений каждого в другой файл Найти в текстовом файле одинаковые слова и вывести количество повторений каждого в другой файл подробнее

Показать сообщение отдельно
tytus
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 15

Run-Time Chack Failure #2 - Stack around the variable "lpBuf" was corrupted - C++

25.05.2012, 16:38. Просмотров 245. Ответов 0
Метки (Все метки)

Имеется проецируемый в память файл ( - размер от 1,5 до > 3 Гб).
Проецирую кусками по 64Кб (как советует Рихтер).
Вот кусок кода, где компилятор ругается на повреждение стека переменной:

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
// Объявим переменные для пропуска первой строки в файле, 
    // нахождения поля и конца записи
    BOOL firstLine = FALSE, fieldFinded = FALSE, bufData = FALSE;
    BOOL eom = FALSE;
    // Объявим переменные для доступа к проэцированным данным
    PBYTE lpData = nullptr;     // основной указатель
    PBYTE lpTempData = nullptr; // вспомогательный указатель (для копирования данных с проэцирования)
    size_t len = 0, bufLen = 0;
    // Переменные для копирования данных с проэцирования
    char lpBuf[32] = {0};       // основной буффер
    char lpTempBuf[32] = {0};   // вспомогательный буффер (для хранения данных предыдущего проэцирования)
...
...
lpData = lpBaseData;
lpDataEnd = PBYTE((DWORD)lpBaseData + dwBytesInBlock);
 
// Если в буфере остались данные от предыдущего проэцирования - добавим их в основной буффер                        
        if (bufData)
        {
            ZeroMemory(&lpBuf[0], 32);
            memcpy_s(&lpBuf[0], 32, &lpTempBuf[0], bufLen);
            bufData = FALSE;
        }
        
        // Обходим побайтно проэцирование
        while ((DWORD)lpData < (DWORD)lpDataEnd)
        {
            // Находим символ 0x3B                      
            lpTempData = lpData;
            while (*lpData != 0x3B && *lpData != 0xA)
            {
                ++lpData;
                if ((DWORD)lpData == (DWORD)lpDataEnd)
                    break;              
            }       
            
            if (*lpData == 0xA)
            {
                ++lpData;
                ++qwRecords;
                //fprintf_s(fFields, "\n");
                continue;
            }   
            // Если конец поля найден
            if (fieldFinded = (*lpData == 0x3B))
            {
                // Вычислим длину поля
                len = (size_t)lpData - (size_t)lpTempData;          
                if (len > 0)
                {                   
                    ZeroMemory(&lpBuf[bufLen], 32 - bufLen);
                    memcpy_s(&lpBuf[bufLen], 32 - bufLen, lpTempData, len);
                    lpBuf[bufLen + len] = ';';
                    bufLen = 0; 
                    //fprintf_s(fFields, &lpBuf[0]);
                }
                //else
                //  fprintf_s(fFields, ";");
            }
            ++lpData;           
        }
        // Проверим - завершилась-ли проэкция на середине поля (не до символа 0x3B)     
        if (!fieldFinded)
        {
            bufLen = (size_t)lpData - (size_t)lpTempData - 1;
            if (bufLen > 0)
            {
                ZeroMemory(&lpTempBuf[0], 32);
                memcpy_s(&lpTempBuf[0], 32, lpTempData, bufLen);
                bufData = TRUE;
            }
        }
        
        // Закрываем проэкцию
        UnmapViewOfFile(lpBaseData);
подскажите как с этим бороться.
Я так понимаю - возможная причина появления сего ругательства - выход за границы
массива lpBuf, но такого не может быть в принципе... длина поля в файле между
символами 0x3B ";" - не более 10..15.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru