информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медSpanning Tree Protocol: недокументированное применениеСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
вобщем вопрос решился... надо было обнулять Buffer... delete... 03.02.05 10:15  Число просмотров: 1615
Автор: Duke Статус: Незарегистрированный пользователь
<"чистая" ссылка>
вобщем вопрос решился... надо было обнулять Buffer... delete оказывается недостаточно.
вот код который нормально работает :

int iFH, iFL, iBR, i, j, ID;
char *Buffer =0; // << --- here -----
AnsiString str, st1[7],subdir,tmpstr;

iFH = FileOpen(FileName, fmOpenRead);
DWORD Error = GetLastError();
iFL = FileSeek(iFH,0,2);
FileSeek(iFH,0,0);
Buffer = new char[iFL+1];
memset(Buffer,NULL,iFL+1); // << ---- here ----
iBR = FileRead(iFH, Buffer, iFL);
FileClose(iFH);
OemToChar(Buffer,Buffer);

j=0;
str=EmptyStr;
for (i=0;i<iBR;i++)
{
if(Buffer[i]!=';')
{
str+=Buffer[i];
}
else
{
st1[j]=str+"\0";
j++;
str=EmptyStr;
}
}
st1[j]=str;
str=EmptyStr;

delete[] Buffer;
Buffer = 0; // --- here ---

<programming>
помогите написать кусочек кода 02.02.05 15:51  
Автор: Duke Статус: Незарегистрированный пользователь
<"чистая" ссылка>
нужно открывать файл в котором лежит типа
1;1;ХХХ;45 08 194515;31.05.2002;ОВД ИВАНОВСКОЕ Г МОСКВА;ИВАНОВ ИВАН ИВАНОВИЧ
и из этого получить массив AnsiString st1[7], соответственно из значений заключенных между ;
я делаю так:

int iFH, iFL, iBR, i, j, ID;
char *Buffer;
AnsiString str, st1[7],subdir,tmpstr;

iFH = FileOpen(FileName, fmOpenRead);
iFL = FileSeek(iFH,0,2);
FileSeek(iFH,0,0);
Buffer = new char[iFL];
iBR = FileRead(iFH, Buffer, iFL);
FileClose(iFH);
OemToChar(Buffer,Buffer);
j=0;
str=EmptyStr;
for (i=0;i<iBR;i++)
{
if(Buffer[i]!=';')
{
str+=Buffer[i];
}
else
{
st1[j]=str;
j++;
str=EmptyStr;
}
}
st1[j]=str;
delete [] Buffer;

вот это все дает access violation после десятка проходов... хз почему... может кто знает как по-другому сделать?
access violation наверняка будет если в строке больше 6 раз... 02.02.05 16:20  
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
access violation наверняка будет если в строке больше 6 раз встретится ';'
да нет , в том то и дело что не может этого быть... все... 02.02.05 16:30  
Автор: Duke Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> access violation наверняка будет если в строке больше 6 раз
> встретится ';'
да нет , в том то и дело что не может этого быть... все файлы стандартные... выгружаются из досовской проги..
пробовал делать st1[255], все пофиг... раз 10 отрабатывает потом access violation...
И все-таки на переполнение индекса массива надо проверять. 02.02.05 18:32  
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
И все-таки на переполнение индекса массива надо проверять.
Еще всегда проверять что файл реально открылся.

OemToChar(s,s) - на не-юникоде вроде допустимо. Но: строка должна кончаться нулем. А всегда ли есть нулевой символ в считанном файле? Лучше на это тоже не расчитывать и нолик в конец добавить.
вобщем вопрос решился... надо было обнулять Buffer... delete... 03.02.05 10:15  
Автор: Duke Статус: Незарегистрированный пользователь
<"чистая" ссылка>
вобщем вопрос решился... надо было обнулять Buffer... delete оказывается недостаточно.
вот код который нормально работает :

int iFH, iFL, iBR, i, j, ID;
char *Buffer =0; // << --- here -----
AnsiString str, st1[7],subdir,tmpstr;

iFH = FileOpen(FileName, fmOpenRead);
DWORD Error = GetLastError();
iFL = FileSeek(iFH,0,2);
FileSeek(iFH,0,0);
Buffer = new char[iFL+1];
memset(Buffer,NULL,iFL+1); // << ---- here ----
iBR = FileRead(iFH, Buffer, iFL);
FileClose(iFH);
OemToChar(Buffer,Buffer);

j=0;
str=EmptyStr;
for (i=0;i<iBR;i++)
{
if(Buffer[i]!=';')
{
str+=Buffer[i];
}
else
{
st1[j]=str+"\0";
j++;
str=EmptyStr;
}
}
st1[j]=str;
str=EmptyStr;

delete[] Buffer;
Buffer = 0; // --- here ---

1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach