Форум программистов, компьютерный форум, киберфорум
Наши страницы

Создание бесконечно большого буфера - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ООП (работа со строкой) нужно немного переделать код http://www.cyberforum.ru/cpp-beginners/thread19055.html
Вообщем мне очень нужно сделать задание(это часть курсового проекта).Нужно написать программу проверки введенного текста. Условие задания: В программе необходимо реализовать принципы объектно...
C++ Написать программу тупики Здравствуйте)Помогите пожалуйста написать программу,с помощью которой можно ликвидировать взаимоблокировки выведением системы после тупика. Спасибо заранее:) Добавлено через 14 часов 16 минут 25... http://www.cyberforum.ru/cpp-beginners/thread19030.html
C++ Довольно Трудная задача(Двумерные массивы)
Вот попалась такая задача: Найти седловую точку целочисленной матрицы с числом строк не более 12, числом столбцов не более 20. Найти произведение ненулевых элементов столбца, в котором...
Borland C 3.14 Работа в графическом режиме!!! C++
Меня интересует каким образом можно вводить/выводить информацию в графическом режиме. Существут ли аналоги функций printf(),scanf();getch() ?:wall:
C++ Удаление всех строк содержащих минимальный элемент матрицы. http://www.cyberforum.ru/cpp-beginners/thread19014.html
Задание: Составить программу обработки матрицы. Удаление всех строк содержащих минимальный элемент матрицы. #include <stdio.h> void Min(int** m, int n) { int j=0, i=0, y, k, MiEl=m; ...
C++ Написать программу, которая подводит итоги конкурса "5 лучших товаров года". Здравствуйте, помогите пожалуйста решить задачу. Написать программу, которая подводит итоги конкурса "5 лучших товаров года". Оценка товара производится по пятибалльной системе. Программа должна... подробнее

Показать сообщение отдельно
Hamster
0 / 0 / 0
Регистрация: 20.12.2008
Сообщений: 4
20.12.2008, 21:41  [ТС]
Вот собрал такой код потока в Bulder 6.0
*.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
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
//--------------------------------------------------------------------------- 
 
#include <vcl.h> 
#pragma hdrstop 
 
#include "LMWROutThrU.h" 
//#include "stdlib.h" 
#include <new.h> 
#pragma package(smart_init) 
#include "vector.h" 
using namespace std; 
typedef vector <short> TempSmalBuf; 
TempSmalBuf *TempSmalBufPtr; 
 
//--------------------------------------------------------------------------- 
 
__fastcall OutDATA::OutDATA(bool CreateSuspended) 
        : TThread(CreateSuspended) 
{ 
} 
//--------------------------------------------------------------------------- 
void __fastcall OutDATA::Execute() 
{ 
    const  short stmpbufsize = 10000; 
    MaxCur = 0, MinCur = 4096; 
    kr = 0; // количество отсчетов 
    LARGE_INTEGER Frequency; // address of current frequency 
    LARGE_INTEGER Start; // address of Start Time 
    LARGE_INTEGER Stop; // address of Stop Time 
    LARGE_INTEGER dTime; // количество отсчетов таймера в секунде 
 
    QueryPerformanceFrequency(&Frequency); //получаем количество отсчетов таймера в одной секунде 
    dTime.QuadPart=Frequency.LowPart*Interv; //вычислим количество необходимых отсчетов таймера в одной секунде 
    Start.QuadPart = -dTime.QuadPart; 
    TempSmalBufPtr = new TempSmalBuf(stmpbufsize); 
 
    do 
    { 
 
        if (Interv != 0) 
                { 
                do 
                        { 
                        QueryPerformanceCounter(&Stop); 
                        } 
                while(Stop.QuadPart-Start.QuadPart < dTime.QuadPart); 
                QueryPerformanceCounter(&Start); //запускаем отсчет заданного времени 
                } 
 
        Result = DataBufferPtr[Chanel]; чтение данных из буфера устройства 
        if (Result < MinCur) 
                MinCur = Result;  //нахождение минимального значения результата 
        if (Result > MaxCur) 
                MaxCur = Result;  //нахождение максимального значения результата 
 
        (*TempSmalBufPtr)[kr] = Result; // перенос данных во временный буфер записи 
        KoefPrived = rkoef->GetKoef(KoefPrIndex, Result); 
        Synchronize(Out); 
        kr += 1; 
    } 
    while (( ! Terminated) && (kr < NZam)); 
   Synchronize(BufToFile); 
   Synchronize(CloseThr); 
} 
//--------------------------------------------------------------------------- 
void __fastcall OutDATA::Out() 
{ 
 
 if (KoefPrived != 0) 
                { 
                ModResEdit->Text = (Result/KoefPrived); 
                MaxModEdit->Text = (MaxCur/KoefPrived); 
                MinModEdit->Text = (MinCur/KoefPrived); 
                } 
 CountLabel->Caption = kr; 
 Application->ProcessMessages(); 
} 
//----------------------------- 
void __fastcall OutDATA::BufToFile() 
{ 
 
delete TempSmalBufPtr; 
TempSmalBufPtr = NULL; 
} 
//----------------------------- 
 
void __fastcall OutDATA::CloseThr() 
{ 
  if (StopButton->Enabled) StopButton->Click(); 
} 
//-----------------------------
*.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
37
38
39
//--------------------------------------------------------------------------- 
 
#ifndef LMWROutThrUH 
#define LMWROutThrUH 
//--------------------------------------------------------------------------- 
#include <Classes.hpp> 
#include "TKoefPrived.h" 
#include "LMWReadU.h" 
//--------------------------------------------------------------------------- 
class OutDATA : public TThread 
{            
private: 
        void __fastcall CloseThr(void); 
        void __fastcall Out(void); 
        void __fastcall BufToFile(void); 
protected: 
        void __fastcall Execute(); 
        Smallint MaxCur, MinCur, Result; 
        unsigned long int kr;  //Счетчик циклов считывания 
        TKoefPrived *rkoef; 
        double KoefPrived; 
        
public: 
        __fastcall OutDATA(bool CreateSuspended); 
        BYTE Chanel; //для ввода канала для считывания 
        TEdit *MinEdit, *MaxEdit, //для вывода результата проверки допустимости значений 
              *ModResEdit, *MaxModEdit, *MinModEdit; //для вывода текущих значений после приведения, если выбран коэф приведения 
        TCheckBox *MinMaxCheckBox; 
        unsigned long int NZam; 
        float Interv;  //для ввода интервала опроса 
        Smallint Max, Min; // для ввода допустимых значений 
        const Smallint *DataBufferPtr; 
        TLabel *CountLabel; 
        TButton *StopButton; 
        BYTE KoefPrIndex; 
        //TSaveDialog *SaveDialog; 
}; 
//--------------------------------------------------------------------------- 
#endif
Возникла такая проблема:
при начальном размере вектора в 10000 элементов типа short - програма вылетает при работе с 18540-м элементом;
при размере в 20000 элементов - при работе с 26732-м; с одной и той же ошибкой "AccessViolation at adress 0041B17...Write of address ********" и тыкает меня носом в строку
(*TempSmalBufPtr)[kr] = Result;
Размер программы в памяти (по данным Диспетчера задач) до начала считывания данных примерно 2056кб, в момент вылета ошибки примерно 2516кб
Включение CodeGuard заставляло томозить считывание примерно после 11000 элемента (при начальном размере вектора в 10000) и выбивало программу по ошибке дебаггера в модуле borlandmm.dll о невозможности записи примерно на 13000 элементе. CodeGuard все это время молчал.
Подскажите в чем может быть проблема и что с ней можно сделать.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.