Ошибка заключается в использовании операторов, если я понял. У меня есть вот такая строка кода:
avio_struct* av=new avio_struct[kol];
и строка удаление динамического массива:
delete av;
При таких параметрах у меня появляется ошибка, что мол, нужно поставить квадратные скобки оператору delete, тогда у меня все нормально запускается, но при активации кода, у меня начинается спам в поле Memo, так как других ошибок я не наблюдал, думаю что проблема здесь.
На всякий случай вот фулл код:
TDateTime d1,d2;
d1=TDateTime("00:00");
d2=TDateTime("05:00");
int fkol;
Memo1->Clear( );
f=FileOpen(s,fmOpenReadWrite);
fkol=FileSeek(f,0,2);
int kol=fkol/size;
avio_struct temp;
avio_struct* av=new avio_struct[kol];
int kolzap=0;
FileSeek(f,0,0);
int i=0;
while (FileRead(f,&as,size))
{
if (as.start_time>=d1 && as.start_time
Если при правильном удалении массива неправильно ведет себя какая либо функция, значит она пытается использовать массив после его удаления, следовательно его нужно удалять после того, как он становится действительно не нужен.
Delete av - не удаляет массив, только указатель на него, который и так уничтожается при выходе из функции, а массив остается висеть в памяти. Его видимо и использует Memo.
// вы делаете многократное удаление
for (i=0;i<kolzap;i++) delete av;
Если вы что-то удалили
delete av;
то сделайте
av = 0; // тогда если даже где-то еще захотят это удалить, то ничего страшного не будет.
Ну и верный ответ, что этот цикл надо заменить на
delete[] av;
навскидку delete [ ] massiv
Про то, что массивы удаляются delete []array вам уже сказали, так что можно я чуть-чуть понудю?
Вообще, судя по предоставленному фрагменту кода, автор вопроса невероятный оптимист. И память у него всегда выделяется без проблем, и файлы всегда открываются. В общем, для полного счастья не хватает розовых пони, пукающих бабочками. Может конечно я неправ и где-то выше там есть try блок, который грудью встает на пути проявлений реального мира, но сдается мне, что на обработку ошибок тут просто забили.
Далее, у нас есть замечательный кусок кода
while (FileRead(f,&as,size))
{
if (as.start_time>=d1 && as.start_time<=d2) continue;
*(av+kolzap)=as;
kolzap++;
}
Насколько я понимаю, у вас есть некий файл, в котором друг за дружкой складируются структуры и вы тут его считываете, чтобы отобрать те из них, которые попадают в заданный вами интервал. Это вполне рабочий код, но его можно существенно улучшить. Дело в том, что операции с диском пипец какие медленные и чем меньше их - тем лучше. Поэтому лучше считывать такой файл не по одной структуре а крупными кусками. Это существенно поднимет производительность.
После загрузки структур и отбора нужных у вас, насколько я понял, предпринимается попытка его отсортировать. От одного взгляда на этот код с двумя циклами for наворачиваются слезы. Если под критерии отбора попадет большое количество структур то у пользователя чудесной программы будет законный повод после запуска функции пойти попить кофе.Чтобы лишить его этого повода можно воспользоваться функцией qsort Вообще же, наиболее правильно сортировать не структуры а УКАЗАТЕЛИ на структуры. Это гораздо быстрее.
RichEdit1->Lines->Clear();
по-моему так