Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

проблема с c++ Builder6, а именно с его утилитой CodeGuard

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> проблема с c++ Builder6, а именно с его утилитой CodeGuard
Имя
Сообщение << Старые топики   Новые топики >>
проблема с c++ Builder6, а именно с его утилитой CodeGuard - 2009-01-06 21:12:53.536666   
HDDimon

Сообщений: 96
Оценки: 0
Присоединился: 2008-08-27 15:43:39.283333
как очистить память в секции void __fastcall TForm1::Button1Click(TObject *Sender)
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include &lt;iostream.h&gt; #include &lt;fstream.h&gt; #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- struct SummaryField { static const long sfData = 0x00; static const long sfLong = 0x01; static const long sfDouble = 0x02; static const long sfText = 0x03; char FieldType; char FieldDescription[31]; long FieldLength; double FieldDoubleValue; void *FieldData; }; struct FileSummary { long RecordCount; SummaryField * Records; }; //------------------------------------------------------------ void GetEPSSummary(char *filePath, FileSummary *Sum) { char strBuf[150]; char c; char temp; AnsiString comments; // одна строка AnsiString FieldStart; // начало строки comments до пробела AnsiString FieldNext; // конец строки comments после пробела ifstream source(filePath); //открываем поток if (!source) ShowMessage("Error: open File!"); //если не выбран файл то сообщить else for (c=0;source.get(c);) // получем по одному символу из потока { if (c == '%') //начиная с символа "%" начинаем работать { source.getline(strBuf,sizeof(strBuf)); //заносим целую строку в буфер comments = strBuf; // приводим буфер к более читаемому виду if ((strBuf[0])=='%') // ищем в строке символ % { for (int DeleteCount=0;DeleteCount!=150;DeleteCount++) // ищем первый пробел { temp = strBuf[DeleteCount]; if (temp == ' ') { FieldStart = (comments.SubString(0,DeleteCount)); // делим строку на 2 части FieldNext = (comments.SubString(DeleteCount+1,comments.Length()-2)); if (FieldStart == "%%BoundingBox:" || FieldStart == "%BoundingBox:") { // заполняем структуру Sum-&gt;Records-&gt;FieldType = Sum-&gt;Records-&gt;sfText; Sum-&gt;Records-&gt;FieldData = (void *) calloc(strlen(FieldNext.c_str())+1,sizeof(char)); strcpy((char *)Sum-&gt;Records-&gt;FieldData,FieldNext.c_str()); strcpy(Sum-&gt;Records-&gt;FieldDescription,"Размер картинки"); } if (FieldStart == "%%LanguageLevel:" || FieldStart == "%LanguageLevel:") { Sum-&gt;Records++; Sum-&gt;Records-&gt;FieldType = Sum-&gt;Records-&gt;sfText; Sum-&gt;Records-&gt;FieldData = (void *) calloc(strlen(FieldNext.c_str())+1,sizeof(char)); strcpy((char *)Sum-&gt;Records-&gt;FieldData,FieldNext.c_str()); strcpy(Sum-&gt;Records-&gt;FieldDescription,"Уровень языка"); } if (FieldStart == "%%Creator:" || FieldStart == "%Creator:") { Sum-&gt;Records++; Sum-&gt;Records-&gt;FieldType=Sum-&gt;Records-&gt;sfText; Sum-&gt;Records-&gt;FieldData = (void *) calloc(StrLen(FieldNext.c_str())+1,sizeof(char)); strcpy((char *)Sum-&gt;Records-&gt;FieldData,FieldNext.c_str()); strcpy(Sum-&gt;Records-&gt;FieldDescription,"Создатель"); } if (FieldStart == "%%Title:" || FieldStart == "%Title:") { Sum-&gt;Records++; Sum-&gt;Records-&gt;FieldType=Sum-&gt;Records-&gt;sfText; Sum-&gt;Records-&gt;FieldData = (char *) calloc(StrLen(FieldNext.c_str())+1,sizeof(char)); strcpy((char *)Sum-&gt;Records-&gt;FieldData,FieldNext.c_str()); strcpy(Sum-&gt;Records-&gt;FieldDescription,"Заголовок"); } if (FieldStart == "%%CreationDate:" || FieldStart == "%CreationDate:") { Sum-&gt;Records++; Sum-&gt;Records-&gt;FieldType=Sum-&gt;Records-&gt;sfText; Sum-&gt;Records-&gt;FieldData = (void *) calloc(StrLen(FieldNext.c_str())+1,sizeof(char)); strcpy((char *)Sum-&gt;Records-&gt;FieldData,FieldNext.c_str()); strcpy(Sum-&gt;Records-&gt;FieldDescription,"Дата создания"); } if (FieldStart == "%%DocumentProcessColors:" || FieldStart == "%DocumentProcessColors:") { Sum-&gt;Records++; Sum-&gt;Records-&gt;FieldType=Sum-&gt;Records-&gt;sfText; Sum-&gt;Records-&gt;FieldData = (void *) calloc(StrLen(FieldNext.c_str())+1,sizeof(char)); strcpy((char *)Sum-&gt;Records-&gt;FieldData,FieldNext.c_str()); strcpy(Sum-&gt;Records-&gt;FieldDescription,"Цвета документа"); } if (FieldStart == "%%DocumentSuppliedResources:" || FieldStart == "%DocumentSuppliedResources:") { Sum-&gt;Records++; Sum-&gt;Records-&gt;FieldType=Sum-&gt;Records-&gt;sfDouble; Sum-&gt;Records-&gt;FieldData = (void *) calloc(StrLen(FieldNext.c_str())+1,sizeof(char)); strcpy((char *)Sum-&gt;Records-&gt;FieldData,FieldNext.c_str()); strcpy(Sum-&gt;Records-&gt;FieldDescription,"Поставляемы ресурсы"); } }}} } } source.close(); }; //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString FileName; // имя файла OpenDialog1-&gt;Filter = "eps|*.eps;|"; // фильтр OpenDialog1-&gt;Execute(); // запускаем диалог выбора файлов FileName=OpenDialog1-&gt;FileName; SummaryField Records[8]; FileSummary sum; sum.Records = Records; sum.RecordCount = sizeof(Records); GetEPSSummary(FileName.c_str(),&sum); // Заполнение таблицы значениями из структуры int i=7; while(i--) sum.Records--; for(i=0; i&lt;7; i++) { StringGrid1-&gt;Cells[2][i] = (char*)sum.Records[0].FieldData; StringGrid1-&gt;Cells[1][i] = (char*)sum.Records[0].FieldDescription; StringGrid1-&gt;Cells[0][i] = ("№ " + IntToStr(i)); sum.Records=sum.Records+1; } StringGrid1-&gt;Cells[0][0] = "Номер:"; StringGrid1-&gt;Cells[1][0] = "Названия полей:"; StringGrid1-&gt;Cells[2][0] = "Значения:"; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Application-&gt;Title = "Eps reader"; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { for (int y=1;y!=9;y++) { StringGrid1-&gt;Cells[2][y] = " "; // чистим колонку значений } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { //выход if ((Application-&gt;MessageBox("Would you like to exit?","EPS reader",MB_YESNO)) == IDYES) { return; } else { Abort(); } } //---------------------------------------------------------------------------
free() почему-то не работает
Post #: 1
RE: проблема с c++ Builder6, а именно с его утилитой CodeGuard - 2009-01-06 22:29:19.520000   
HDDimon

Сообщений: 96
Оценки: 0
Присоединился: 2008-08-27 15:43:39.283333
проблема была решена

while(i–) {
free(sum.Records->FieldData); //очищаем выделенную память
sum.Records–;
}
Post #: 2
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> проблема с c++ Builder6, а именно с его утилитой CodeGuard







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.