powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вылетает ошибка доступа к памяти borlndmm.dll???
10 сообщений из 60, страница 3 из 3
Вылетает ошибка доступа к памяти borlndmm.dll???
    #38760500
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДля оконной программы я бы при завершении потока посылал из него сообщение окну, а там
уменьшал счётчик запущенных потоков. Дошёл до нуля - готово.
В консольной программе или сервисе я бы использовал _beginthread вместо TThread +
WaitForMultipleObjects - оно вернётся когда все потоки завершатся.
Кстати еще по поводу использования TThread в С++Builder. В си rtl используется блок данных _thread_data для каждого потока - там хранятся например errno, random seed и еще некоторое количество данных. Этот блок данных выделяется при вызовах _beginthread/_beginthreadex и освобождается в _endthread/_endthreadex. А если поток создан мимо _beginthread/_beginthreadex, то _thread_data автоматически выделится при первом обращении к функции, которой этот блок данных нужен. И никогда не будет освобожден. При использовании TThread _thread_data не выделяется и не освобождается. Если в потоке используются функции, которым этот блок данных нужен, по завершении потока будет утечка памяти. Небольшая, несколько десятков байт. Но при активном создании потоков например в постоянно работающем сервисе - может выйти нехорошо.
...
Рейтинг: 0 / 0
Вылетает ошибка доступа к памяти borlndmm.dll???
    #38772703
MaxFM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все - данную проблему решил.
не подскажете еще вот такой вопрос
есть структура
Код: plaintext
1.
2.
3.
4.
5.
struct tstr
{int a;
 float b;
String c;
}


и данная структура будет являться элементов списка TList.
Вопрос - если я хочу чтобы сортировка была или по параметру а или по b или по с - в зависимости от моего пожелания.
Это надо дополнительно функцию обработки делать - в стандартным TList->Sort такое не сделаешь?
...
Рейтинг: 0 / 0
Вылетает ошибка доступа к памяти borlndmm.dll???
    #38772966
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxFMв стандартным TList->Sort такое не сделаешь?
Код: plaintext
1.
__fastcall Sort(TListSortCompare Compare);

читай, что такое TListSortCompare , и будет тебе щастье.
...
Рейтинг: 0 / 0
Вылетает ошибка доступа к памяти borlndmm.dll???
    #38774138
MaxFM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, разобрался.
...
Рейтинг: 0 / 0
Вылетает ошибка доступа к памяти borlndmm.dll???
    #38775730
MaxFM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
народ, поправьте если я не прав.
Список TList- хранит указатели на объекты любого типа. Т.е. он не хранит сами объекты у себя в Items а только указатели на них.
поэтому для того чтобы список заполнить надо постоянно создавать новый объект.
т.е. я делал вот так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
TobjIem *objItem;
objItem=new TobjItem;
For (int i=0;i<count;i++)
{objItem->i=i;
 objItem->c=c;
 objItem->b=b;
 objLIst->Add(objItem);
}



Это получается неправильно так как я в список добавляю один и тот же объект. хотя у меня так все работало без проблем.....
Тогда получается надо делать так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
TobjIem *objItem;

For (int i=0;i<count;i++)
{objItem=new TobjItem;
 objItem->i=i;
 objItem->c=c;
 objItem->b=b;
 objLIst->Add(objItem);
}


И если еще раз повторить что элементами списка явл. только указатели то при методе Tlist->Clear удаляются только указатели но сами объекты остаются в памяти.
тогда перед очисткой списка надо делать еще что-то типа
delete Tlist->items(i);

я во всем прав или нет?!!!!!
...
Рейтинг: 0 / 0
Вылетает ошибка доступа к памяти borlndmm.dll???
    #38775734
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прав, по сути
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вылетает ошибка доступа к памяти borlndmm.dll???
    #38775750
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxFMСписок TList- хранит указатели на объекты любого типа.
TList хранит просто указатели. Всё равно на что. Указатели на объекты хранит TObjectList.
И он умеет их освобождать при необходимости.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вылетает ошибка доступа к памяти borlndmm.dll???
    #38776530
MaxFM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovMaxFMСписок TList- хранит указатели на объекты любого типа.
TList хранит просто указатели. Всё равно на что. Указатели на объекты хранит TObjectList.
И он умеет их освобождать при необходимости.

моими элементами списка являются структуры.
Т.е. если использовать TObjectList для данной задачи то дополнительно не надо будет самому удалять эти структуры?
...
Рейтинг: 0 / 0
Вылетает ошибка доступа к памяти borlndmm.dll???
    #38776876
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxFMмоими элементами списка являются структуры.
Т.е. если использовать TObjectList для данной задачи то дополнительно не надо будет самому удалять эти структуры?Не, TObjectList - только для наследников TObject.
...
Рейтинг: 0 / 0
Вылетает ошибка доступа к памяти borlndmm.dll???
    #38778011
MaxFM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BarloneНе, TObjectList - только для наследников TObject.
ну тогда я тут вижу 2 варианта.
1. доп. удаление самих структур из списка и после очищение списка
2. создание нового класса для списка,наследника TList и там тоже самое прописать.
...
Рейтинг: 0 / 0
10 сообщений из 60, страница 3 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вылетает ошибка доступа к памяти borlndmm.dll???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]