Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 497
от 17.08.2006, 19:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 358, Экспертов: 57
В номере:Вопросов: 4, Ответов: 7


Вопрос № 51882: Здравствуйте уважаемые эксперты! Я пишу MVS.Ner на C++. Сталкнулся с такой проблемой, когда я использую delete переменная не удаляется, а при работе с COM после вызавов release анологично. Т.е если я пишу в коде: MyClass *He...
Вопрос № 51892: Добрый вечер уважаемые эксперты! Такая проблемка. В Borland C++ & Application Frameworks 3.1 примечания ( //...) и вывод на экран текста (cout << ...) надо выводить русским буквами. Как подсказали, скачал программку KEYRUS.COM из него з...
Вопрос № 51900: Здравствуйте. В VC6: чем отличаются формы в MFC APP и MFC DLL - почему в DLL фон картинки изменяется и сама картинка инвертируется, как это изменить? ..
Вопрос № 51938: я нчинающий програмист. дайте ссылки пожалуйста где есть примеры создания программ простейщих в borland c++ 6. заранее всем благодарен...

Вопрос № 51.882
Здравствуйте уважаемые эксперты!
Я пишу MVS.Ner на C++.
Сталкнулся с такой проблемой, когда я использую delete переменная
не удаляется, а при работе с COM после вызавов release анологично.
Т.е если я пишу в коде:

MyClass *Head = NULL;
Head = new MyClass;
delete Head;
If (Head == NULL) return; (этот всегда лож)
...
хотя при попытке обращения к элементам этого класса возникает
ошибка access violation.
С переменными я после удаления явно присваиваю NULL, но как быть с COM?

В билдоре тоже самое. Windows переставлял.
Отправлен: 11.08.2006, 21:08
Вопрос задал: Vincent (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Jadd
Здравствуйте, Vincent!
Да точно так же с СОМ, как и с обычными указателями на класс. Делаете Release и pMyCOMRef = NULL; Вот и все. Не совсем понятно что так вызвало затруднение.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал)
Адрес: Санкт-Петербург
WWW: http://www.sport-diary.ru
ICQ: 28260749
----
Ответ отправлен: 11.08.2006, 21:17
Оценка за ответ: 5
Комментарий оценки:
Спасибо, я просто раньще не замечал.

Отвечает: Rusfaq mustdie
Здравствуйте, Vincent!
Все правильно. После удаление указатель автоматически не устанавливается в NULL. Одно из правил хорошего программирования гласит, что необходимо при инициализации и после удаление праравнивать указатель к NULL.
---------
Rusfaq mustdie
Ответ отправил: Rusfaq mustdie (статус: Заблокирован)
Ответ отправлен: 11.08.2006, 21:19
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

Отвечает: estiGi
Здравствуйте, Vincent!
Все нормально, не волнуйтесь вы так :)
Это свойство языка, удаленные переменные не устанавливаются в ноль. Нужно это делать ручками, если есть такая необходимость:

MyClass *Head = NULL;
Head = new MyClass;
delete Head;
Head = NULL:

IMalloc * pMalloc = NULL;
SHGetMalloc (&pMalloc);
pMalloc->Release ();
pMalloc = NULL;

C COM'ом можно (даже нужно) пользоваться обвертками. Например, CComPtr. После освобождения переменные устанавливаются в ноль:

CCopPtr pMalloc;
SHGetMalloc (&pMalloc);
pMalloc.Release ();
if (pMalloc == NULL) { // истина
}
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 11.08.2006, 21:20
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Про обвертки слышал, но незнал для чего они.

Отвечает: Mihasic
Здравствуйте, Vincent!
Касательно оператора delete, то он и не должен присваивать NULL переменной, а память он освобождает.
Во второй строчке необходимо (так правильнее для классов) писать со скобками:
Heap = new MyClass(); // хотя это дело вкуса

А что касается COM, то он тоже не должен быть равным NULL (и вообще все зависит от обертки, которую Вы используете или не используете). Для осторожности присваивайте просто NULL.
Ответ отправил: Mihasic (статус: 5-ый класс)
Ответ отправлен: 12.08.2006, 12:44
Оценка за ответ: 5
Комментарий оценки:
Спасибо.
Сейчас читаю про обертки.


Вопрос № 51.892
Добрый вечер уважаемые эксперты!
Такая проблемка.
В Borland C++ & Application Frameworks 3.1 примечания ( //...) и вывод на экран текста (cout << ...) надо выводить русским буквами. Как подсказали, скачал программку KEYRUS.COM из него запустите файл rus.bat (Пуск-выполниь-...-rus.bat) потом уже запускаю ВС++. На работе все нормально переключение есть по Left Ctrl+Shift и Right Ctrl+Shift плюс есть звук системного динамика. Дома болт, делаю все то же самое, и ни фига. Винда на работе и дома ХР SP2, только сразных дистрибутивов. На работе никто ничего менять не мог, не в настройках, не в реестре,т.к. комп стоит у начальника, пользуется только OFFIS-ом, дома то же только винду переустановил. Плюс ВС++ и KEYRUS.COM запускал с флешки, все через "Пуск-Выполнить-...". Подскажите почему дома rus.bat не идет, и чо можно сделать?
Заранее спасибо.
С уважением Евгений.
Отправлен: 11.08.2006, 22:23
Вопрос задал: МИТРОФАНОВ Е.В. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 7)

Отвечает: Mihasic
Здравствуйте, МИТРОФАНОВ Е.В.!
Основное использование KEYRUS.COM - для возможности в ДОСе (в винде нет необходимости) переключать раскладку клавиатуры.
Если Вы просто не могли набрать текст программы русскими буквами, то это можно сделать и так (если под виндой, в текстовом редакторе - желательно в ДОС-кодировке для вашего компилятора). А касательно вывода на консоль - проверьте текущую кодовую страницу, в CMD есть команды:
mode con codepage
mode con cp select=<номер кодовой страницы, например 866, 1251>

Ответ отправил: Mihasic (статус: 5-ый класс)
Ответ отправлен: 12.08.2006, 12:54
Оценка за ответ: 4
Комментарий оценки:
Надо как говорят в OEM кодировке, делаю в блокноте, там русские буквы, а выходит после закорючки. Но можно, через ТоталКомандер сохранить в DOS-866 кодировке,да и в блокноте неудобно набирать. Хотелось бы в самом ВС++ русские буквы писать.


Вопрос № 51.900
Здравствуйте. В VC6: чем отличаются формы в MFC APP и MFC DLL - почему в DLL фон картинки изменяется и сама картинка инвертируется, как это изменить?
Отправлен: 11.08.2006, 23:37
Вопрос задал: vanya (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: estiGi
Здравствуйте, vanya!
Простите, но не объясните суть вопроса подробнее? Какие такие картинки??
Хотя, может, другие эксперты вполне поняли вопрос....
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 13.08.2006, 07:13


Вопрос № 51.938
я нчинающий програмист. дайте ссылки пожалуйста где есть примеры создания программ простейщих в borland c++ 6. заранее всем благодарен
Отправлен: 12.08.2006, 17:14
Вопрос задал: Nur87 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Morgion
Здравствуйте, Nur87!
http://firststeps.ru/
http://sources.ru/
На первом примеры + обучение, на втором - исходники.

Приложение:

Ответ отправил: Morgion (статус: Студент)
Ответ отправлен: 13.08.2006, 19:52
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное