C/C++

Ошибка в динамическом массиве new[] и delete[] |С++ Builder

Ошибка заключается в использовании операторов, если я понял. У меня есть вот такая строка кода:
 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.
Cаня Петухов
51 416
Лучший ответ
// вы делаете многократное удаление
for (i=0;i<kolzap;i++) delete av;

Если вы что-то удалили
delete av;
то сделайте
av = 0; // тогда если даже где-то еще захотят это удалить, то ничего страшного не будет.
Ну и верный ответ, что этот цикл надо заменить на
delete[] av;
навскидку delete [ ] massiv
Андрей Трофимов а я не вижу, что ты выводишь в MEMO и когда вывод идёт
Андрей Трофимов Memo1->Lines->Clear();
RichEdit1->Lines->Clear();
по-моему так
Андрей Трофимов именно сам массив строк очищается
Про то, что массивы удаляются delete []array вам уже сказали, так что можно я чуть-чуть понудю?
Вообще, судя по предоставленному фрагменту кода, автор вопроса невероятный оптимист. И память у него всегда выделяется без проблем, и файлы всегда открываются. В общем, для полного счастья не хватает розовых пони, пукающих бабочками. Может конечно я неправ и где-то выше там есть try блок, который грудью встает на пути проявлений реального мира, но сдается мне, что на обработку ошибок тут просто забили.

Далее, у нас есть замечательный кусок кода
while (FileRead(f,&as,size))

{

if (as.start_time>=d1 && as.start_time<=d2) continue;

*(av+kolzap)=as;

kolzap++;

}
Насколько я понимаю, у вас есть некий файл, в котором друг за дружкой складируются структуры и вы тут его считываете, чтобы отобрать те из них, которые попадают в заданный вами интервал. Это вполне рабочий код, но его можно существенно улучшить. Дело в том, что операции с диском пипец какие медленные и чем меньше их - тем лучше. Поэтому лучше считывать такой файл не по одной структуре а крупными кусками. Это существенно поднимет производительность.
После загрузки структур и отбора нужных у вас, насколько я понял, предпринимается попытка его отсортировать. От одного взгляда на этот код с двумя циклами for наворачиваются слезы. Если под критерии отбора попадет большое количество структур то у пользователя чудесной программы будет законный повод после запуска функции пойти попить кофе.Чтобы лишить его этого повода можно воспользоваться функцией qsort Вообще же, наиболее правильно сортировать не структуры а УКАЗАТЕЛИ на структуры. Это гораздо быстрее.
Дмитрий Давыдов У меня этот код с задания, с книжки, если быть точнее, мне, студенту, остаётся только компилировать коды и исправлять ошибки, ошибку с дин. массивами я решил, точнее, моя проблема не в них заключалась, а в строке кода f=FileOpen(s,fmOpenWrite); который при запуске открывает файл и начинает спамить в поле memo, в общем, все очень плохо, решил уже пропустить этот код, т.к. мало инфы в инете по этому багу.
Сергей Таныгин Касательно f=FileOpen(s,fmOpenWrite) - он никак не может спамить в memo. Это, скорее всего, обертка над функцией write которая принимает в качестве аргумента файловый дескриптор, куда писать, указатель на буфер и количество байт, которые необходимо записать в файловый дескриптор. Уверен, что ваше memo портится от чего-то другого.
Вообще в качестве общей рекомендации: разделите весь код на три функции. Пусть одна загружает, вторая сортирует а третья выгружает. И обработку ошибок, чтобы вы видели, что пошло не так как надо.