Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flasher.ru > Флейм

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 08.12.2001, 15:38
MyXus вне форума Посмотреть профиль Отправить личное сообщение для MyXus Посетить домашнюю страницу MyXus Найти все сообщения от MyXus
  № 1  
MyXus
 
Аватар для MyXus

Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
По умолчанию Ещё чуть-чуть С'ей++

Вот в тот раз (2 дня назад) я боролся сэтим классом, щас программу чуть усложнил - теперь опять на нём всё падает. Дело в том что он очень часто используется и соответственно очень часто гоняется конструктор. Ну так ведь и деструктор живой! В чём дело?
Симпотмы (в зависимости от настроения компилятора)
-глухое вылетание
-полная билиберда на экране (выводится всё что только можно одновременно)
-тормоз как на i8086 - каждая операция выполняется по 2-5 секунд, и после выполнения нескольких функций переходим в п.2 или п.1

Деструктор и конструктор:

PANEL::PANEL()
{
pos=1;
t_pos=1;
y_pos=1;
Delay=0;
x_pos[0]=3;
x_pos[1]=13;
x_pos[2]=27;
x_pos[3]=39;
strcpy(names[0],"Файл");
strcpy(names[1],"Добавить");
strcpy(names[2],"Помощь");
strcpy(names[3],"Выход");

filemenu=new char*[6];
for(int i=0;i<6;i++)
filemenu[i]=new char[29];
strcpy(filemenu[0],"Новое окно ");
strcpy(filemenu[1],"Открыть ");
strcpy(filemenu[2],"Сохранить ");
strcpy(filemenu[3],"Сохранить как ... ");
strcpy(filemenu[4],"Изменить справочники ");
strcpy(filemenu[5],"Распечатать таблицу ");

basemenu=new char*[3];
for(i=0;i<3;i++)
basemenu[i]=new char[27];
strcpy(basemenu[0],"Справочник названий фирм");
strcpy(basemenu[1],"Справочник телефонов ");
strcpy(basemenu[2],"Справочник адресов ");

addmenu=new char*[2];
for(i=0;i<2;i++)
addmenu[i]=new char[27];
strcpy(addmenu[0],"Добавить запись ");
strcpy(addmenu[1],"Редактировать таблицу ");
}

PANEL::~PANEL()
{
delete x_pos;
for(int i=0;i<4;i++) delete names[i];
for(i=0;i<6;i++) delete filemenu[i];
for(i=0;i<3;i++) delete basemenu[i];
for(i=0;i<2;i++) delete addmenu[i];
}
__________________
#define true false //счастливой отладки, друзья

Старый 08.12.2001, 16:14
Countach вне форума Посмотреть профиль Отправить личное сообщение для Countach Найти все сообщения от Countach
  № 2  
Countach
 
Аватар для Countach

Регистрация: Mar 2001
Адрес: Cyprus, Nicosia
Сообщений: 795
Отправить сообщение для Countach с помощью ICQ
Блин может имеет смысл сделать инлайн функцию для того что часто используешь
Ну честно говоря я ваще не понял что за хренотень ты делаешь в твоем примере

А картинка так себе
__________________
Кто рано встает, тому... спать весь день хочется.

Старый 08.12.2001, 16:24
MyXus вне форума Посмотреть профиль Отправить личное сообщение для MyXus Посетить домашнюю страницу MyXus Найти все сообщения от MyXus
  № 3  
MyXus
 
Аватар для MyXus

Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
Так. Я не понял чего непонято 8-)
Я дал конструкторы-деструкторы чтоб мож кто глюки мои заметит.
Инлайн функции то причём? Просто в классе PANEL у меня куча функций сидит, и чтобы объекты за собой не таскать я в каждой крупной ф-ии делаю свой объект, соответственно, в худшем случае, пяток копий всех вышеперечисленных массивов в памяти валяется. Но ведь это крайне мало - пара килобайт! Значит гдето глюк зарыт. А поскольку падаю я стабильно при проходе конструктора, значит глюк где то в нём, логично?

(а если в картинке вторую бабину зделать крутящейся? ?)
__________________
#define true false //счастливой отладки, друзья


Последний раз редактировалось MyXus; 08.12.2001 в 16:27.
Старый 08.12.2001, 16:28
RFMitrio вне форума Посмотреть профиль Отправить личное сообщение для RFMitrio Посетить домашнюю страницу RFMitrio Найти все сообщения от RFMitrio
  № 4  
RFMitrio
 
Аватар для RFMitrio

Регистрация: Aug 2001
Адрес: город на Неве
Сообщений: 1,908
Отправить сообщение для RFMitrio с помощью ICQ
Так хотел ответить,так хотел... Но увы, не очень понял листинг.
__________________
suum quique

Старый 08.12.2001, 16:33
MyXus вне форума Посмотреть профиль Отправить личное сообщение для MyXus Посетить домашнюю страницу MyXus Найти все сообщения от MyXus
  № 5  
MyXus
 
Аватар для MyXus

Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
А что непонятно?
Давайте приведу класс?
Вот оно (частично)

class PANEL {
public: int pos,x_pos[4],y_pos,t_pos,Delay,StrNum;
char **filemenu,**addmenu,**basemenu;
public: char names[4][20];
.........................ОПИСАНИЕ ФУНКЦИЙ............................
PANEL();
~PANEL();
};

Короче, первый листинг - простая инициализация массивов. Но почему то плохо работает. Нестабильно. Я такое лечить не умею 8-(
__________________
#define true false //счастливой отладки, друзья


Последний раз редактировалось MyXus; 08.12.2001 в 16:35.
Старый 08.12.2001, 16:44
RFMitrio вне форума Посмотреть профиль Отправить личное сообщение для RFMitrio Посетить домашнюю страницу RFMitrio Найти все сообщения от RFMitrio
  № 6  
RFMitrio
 
Аватар для RFMitrio

Регистрация: Aug 2001
Адрес: город на Неве
Сообщений: 1,908
Отправить сообщение для RFMitrio с помощью ICQ
Я, конечно, могу ошибаться, но:
1. зачем делать делать delete x_pos? Мне почему-то кажется, что этот-то массив сам уничтожается при вызове деструктора, так как он не является явным указателем и под него не выделяется память оператором new.
2. по-моему, надо делитить не только filename[i], но и сам filename. То же касается остальных двухмерных строковых массивов.
__________________
suum quique

Старый 08.12.2001, 19:05
MyXus вне форума Посмотреть профиль Отправить личное сообщение для MyXus Посетить домашнюю страницу MyXus Найти все сообщения от MyXus
  № 7  
MyXus
 
Аватар для MyXus

Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
2 RFMitrio Да, точно, спасибо Но....

Я в отчаянии просто 8-(( Не могу локализовать ошибку! Есть у меня 2 функции, абсолютно одинаковы кроме одного: в одной я создаю новую ячейку в списке, а для второй - использую старые значения. Вторая сваливается после 20-40 выполнения (мелкие огрехи в работе с памятью, не так страшно, препод не заметит), а вот первая сваливается на втором выполнении. Причём программа падает совершенно в другом месте - в конструкторе, которому видать уже не хватает памяти. Но зависимость установлена точно - как только я отрубаю конструирование новой ячейи - всё живёт! Но алгоритм - безупречнен! Всё работает, после выполнения функции все параметры и значения такие как надо! Чё мне делаааать?????
__________________
#define true false //счастливой отладки, друзья

Старый 08.12.2001, 20:01
MyXus вне форума Посмотреть профиль Отправить личное сообщение для MyXus Посетить домашнюю страницу MyXus Найти все сообщения от MyXus
  № 8  
MyXus
 
Аватар для MyXus

Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
Всё, теперь она вешеатся при любом повторном изменении списков. Пойду повешусь.

(зато Load в список работает!!!)
__________________
#define true false //счастливой отладки, друзья

Старый 08.12.2001, 20:53
Docelon вне форума Посмотреть профиль Найти все сообщения от Docelon
  № 9  
Docelon
Banned

Регистрация: Oct 2001
Адрес: Украина Николаев
Сообщений: 179
Да......круто я ваще не въехал в етот развал!

Старый 08.12.2001, 23:59
DeepDiver вне форума Посмотреть профиль Отправить личное сообщение для DeepDiver Найти все сообщения от DeepDiver
  № 10  
DeepDiver

Регистрация: Oct 2000
Адрес: Подмосковье
Сообщений: 637
Отправить сообщение для DeepDiver с помощью ICQ
гм.... Я конечно в сях не очень рублю... но пара мыслей все таки возникла..

1) Удалять x_pos действительно не нужно - это делается автоматом.

2) Строки в массивах у тебя аллокируются как массивы char. У меня тут возникло воспоминание, что указатели, зааллокированные, как массивы, нужно удалять не простым delete, а delete[] (прям так и пишется со скобками). Уточни, может я и ошибаюсь... Но не бывает дыма без огня. По крайней мере такая фича кажется была в BC++ 4.5

3) Сами массивы names и т.д. тоже надо удалять после удаления их элементов.

4) Нафиг ты каждый раз аллокируешь память под эти элементы, ежели они у тебя лежат константами? Если у тебя эти элементы не могут измениться за время жизни класса, то почему бы тебе не объявить их константами, а в свои массивы пихать просто адреса констант. По моему так.... И быстрее, и практичнее...
__________________
Не ошибается то, что не работает. (с) Windows

Создать новую тему   Часовой пояс GMT +4, время: 03:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:37.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.