Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: taraslis
Дата сообщения: 06.08.2007 17:47
Блин, я чайник. Пишу прогу на срр. Выдаётся ошибка, причём ссылается на внутренний код. Мне кажется, что всё дело в том, что я выделяю много памяти. Есть какие-нибудь ограничения на размер выделяемой памяти?
Автор: Terran888
Дата сообщения: 06.08.2007 17:58
Ограничения впринципе есть. Ты лучше напиши что именно не равится компмилятору.
Автор: taraslis
Дата сообщения: 06.08.2007 18:16
Обрывает работу проги и пишет в мелком окошке:
Fault: access violation at 0x40f4f8: write of address 0x8.
А потом: выдаёт окошко CPU. Вот подругому не могу.
Автор: rain87
Дата сообщения: 06.08.2007 19:50
TeXpert
Цитата:
Microsoft успел так основательно деформировать сознание многих -- к слову, ты не замечал, что уже так часто там, где следует писать "/", уже пишут "\" (Добавить/удалить)?
я наоборот часто пишу c:/path/
но в целом конечно да

Добавлено:
taraslis
код дай, если не очень большой
Автор: TeXpert
Дата сообщения: 06.08.2007 23:19
Terran888
Цитата:
Как написать что-то нормальное для Win16?
Как обычно, как пишутся другие программы. Повторюсь в третий раз -- в этом случае ты можешь даже стереть сам исполняемый файл ("самоуничтожающаяся" программа).
Автор: marrow1
Дата сообщения: 08.08.2007 17:55
Мне нужен VirtualDub-MPEG-2 х64, но его нигде нету, обычный VirtualDub х64 есть, а VirtualDub-MPEG-2 х64 нигде нету. Кодеки х64 есть, а проги нету нормальной. Дело в том что простой VirtualDub не открывает vob, mpeg2 и т.д. файлов. Я скачал исходники VirtualDub-MPEG-2, чтобы самому откомпилировать его под х64, нот что написано там в требованиях:

Build requirements

You need the following tools to build VirtualDub out of the box:
Microsoft Windows NT 4.0, 2000, or XP. You can build under 95/98/ME, but you will need to modify the build process.
Microsoft Visual C++ 6.0 or Microsoft Visual Studio .NET (2003).
Microsoft DirectX 9.0c Software Development Kit.
Info-ZIP for Win32 (zip.exe).

Себе установил Microsoft Visual Studio .NET (2005)
Дальше же в требованиях есть такая графа:

Building under Microsoft Visual Studio 2005

After importing the VC6 .dsp and .dsw files, you should make the following changes to the imported project files:
C/C++, Preprocessor, Preprocessor Definitions: Add _CRT_SECURE_NO_DEPRECATE and _SCL_SECURE_NO_DEPRECATE
C/C++, Code Generation, Buffer Security Check: No
C/C++, Code Generation, Runtime Library: Multi-threaded (/MT) or Multi-threaded Debug (/MTd)


If you are using Standard or Express, then you will need to find a version of the Microsoft Macro Assembler (MASM) to use. Either MASM 6.15 from the VC6 Processor Pack or MASM 7.10 from VS.NET 2003 will work fine.

Запускал проект, но его не полностью компилит, и пишет что не все составные проекта скомпилированы. Пробовал с друго, который намного лучше меня сечет в программировании, но ничего не выходит, что под платформу win32, что под х64. Друг говорит что скорее всего ему не хватает Microsoft DirectX 9.0c Software Development Kit, а тот на сайте Майкрософта весит 450 Мб, я его качать не стал. Есть даже готовый батник в папке с исходниками для компиляции под любую платформу, через него тоже ничего не получается. Может дело в том что у меня Vista x64 ? Даже и не знаю. Или может кто-то может его скомпилить под х64? Помогите пожалуйста, кто чем может.
Вот ссылка на исходник проги http://fcchandler.home.comcast.net/stable/VirtualDub-MPEG2-source.zip
Автор: Zyava
Дата сообщения: 08.08.2007 23:14

Цитата:
Build requirements

You need the following tools to build VirtualDub out of the box:
Microsoft Windows NT 4.0, 2000, or XP. You can build under 95/98/ME, but you will need to modify the build process.
Microsoft Visual C++ 6.0 or Microsoft Visual Studio .NET (2003).
Microsoft DirectX 9.0c Software Development Kit.
Info-ZIP for Win32 (zip.exe).

Если на писано что нужен Microsoft DirectX 9.0c Software Development Kit то значит без него скомпилировать нельзя, значит нужно или найти Microsoft DirectX 9.0c Software Development Kit или человека у которого он есть и который захочет помочь, больше вариантов нет (разве что где-то найдется уже скомпилированный VirtualDub-MPEG-2 х64)
Автор: marrow1
Дата сообщения: 09.08.2007 01:09
Zyava

Вот и спрашиваю может кто скомпилит. Там не так уж и много дела, но у меня не всё есть, а Microsoft DirectX 9.0c Software Development Kit я скачать не могу.
Автор: NNS
Дата сообщения: 10.08.2007 14:54
Здравствуйте. Я пишу программу, работающую с БД Access. У меня получается так, что при каждом обращении к функции, которая непосредственно обращается к БД происходит подключение, открытие и закрытие БД, что сказывается на скорости работы программы. Вот вопрос, можно ли один раз открыть БД, а в конце работы программы просто закрыть ее. Т.е. что б процесс открытия/закрытия происходил один раз, а "знали" об этом все функции...
Автор: aslav
Дата сообщения: 10.08.2007 16:09

Цитата:
Блин, я чайник. Пишу прогу на срр. Выдаётся ошибка, причём ссылается на внутренний код. Мне кажется, что всё дело в том, что я выделяю много памяти.


код приведи.
Автор: Mickey_from_nsk
Дата сообщения: 14.08.2007 14:23
taraslis
Ну еще бы привел хотя бы платформу. Похоже в памяти чего-то мудришь - перетираешь код данными. Код приведи.
Автор: wolganin
Дата сообщения: 14.08.2007 20:03
Всем привет!
Подскажите, можно ли как нибудь определить, что параметр, переданный как char *, содержит ошибку - например, нет символа окончания строки.

Нужно как-то защиту от "дурака" построить. Сейчас при попытке чтения - ошибка доступа к памяти...

Буду очень благодарен ...
Автор: TeXpert
Дата сообщения: 14.08.2007 22:58
wolganin
Ну так просканируй этот буфер на наличие этого символа
Автор: distance
Дата сообщения: 15.08.2007 16:21
wolganin
в порядке убывания приоритетов
1. передавать std::string
2. передавать не только char, но и size_t
3. SEH
Автор: Mickey_from_nsk
Дата сообщения: 16.08.2007 11:33
wolganin
В догонку к distance
4. Возьми BoundsChecker.
Вообще то странно. Эту штуку надо проверять ДО входа в функцию а не после. По идее, если ты используешь char*, то ты даже сказать не сможешь размер того, что тебе надо проверить, где ты вообще терминирующий нуль искать будешь?
Если проблема в перетирании буфера - самое оно какой-нибудь сторонней утилитой это проверить.
Автор: KADABRA
Дата сообщения: 02.09.2007 21:45
Посоветуйте кроссплатформенную библиотеку на C++ для работы с xml в виде DOM-дерева. (необходимо сгенерировать xml-ку).
Автор: vshersh
Дата сообщения: 03.09.2007 09:26
KADABRA
Я сам не юзал, но посмотри Xerces-C++
Автор: The Sith
Дата сообщения: 03.09.2007 15:34
народ извените за тупой вопрос (все когдато начинали).Так вот штобы открыть среду для Visual C++ надо открыть файл danim.dll,а перед этим его зарегестрировать,я зарегестрировал но файл не открывается, выскакивает выбор програм.Я конешно туплю но всеравно не понимаю как открыть среду!!
Еще раз извените за тупой вопрос!
Автор: terminat0r
Дата сообщения: 03.09.2007 16:04
The Sith
я конечно не понимаю для чего тебе открывать эту длл
но если ты действительно хочешь запустить длл как программу то cmd-> rundll dll.
Но мне кажется ты сам не понимаешь свой вопрос.
чтобы открыть среду для Visual C++ надо запустить cmd и задать в нем все переменные окружения, как правило они находятся в специальном батнике.
При инсталляции все это автоматически настраивается
Если запустить визуальную среду- то просто запускай студию.
Если ты хочешь использовать длл в своей программе- это уже еще одна тема
и т.д.
Автор: The Sith
Дата сообщения: 03.09.2007 17:22
СП,навена нашел левый туториал(

Добавлено:
terminat0r
получается што эксешник среды есть где то в виндоус, но как его запустить если незнаешь пути к нему ни даже названия?
Автор: xdude
Дата сообщения: 03.09.2007 20:27
The Sith
А в меню "Пуск/Программы" что, ссылок не создалось после установки? Или у тебя там такой хаос, что ты их найти не можешь (как со мной иногда бывает) ?
Автор: TeXpert
Дата сообщения: 03.09.2007 20:42
The Sith
Цитата:
...все когдато начинали
Поверь мне, ты круче всех начал). Во-первых, о какой версии идёт речь?
Цитата:
...штобы открыть среду для Visual C++ надо открыть файл danim.dll
Откуда дровишки, то бишь такая информация? И зачем что-то регистрировать?
Если печь идёт о 6-й версии, то его действительно можно использовать без инсталляции, только надо кое-что настроить (каталоги INCLUDE и другие, это легко). В этом случае надо запустить из каталога COMMON\MSDEV98\BIN msdev.exe, или msdev.com, которые запускают среду.
Автор: The Sith
Дата сообщения: 03.09.2007 20:48
сп за помощь...а дравишки навена точно левые!)
Автор: KADABRA
Дата сообщения: 07.09.2007 10:05
vshersh
Спасибо, похоже на то что нужно. Буду разбиратся.
Автор: FlamingWind
Дата сообщения: 07.09.2007 10:20
Вопрос по try.

Есть модуль, подгружающий некоторые плагины из заданного каталога. Модуль пишу я, плагины - кто угодно.
Модуль последовательно у всех плагинов директории вызывает некоторые функция и необходимо, чтобы прога не крашилась даже в случае ошибки в функциях этих плагинов (деление на 0 и т.п.).
Пробую организовать по средствам try:

try
{
CurrentPlugin.pPluginInstance = CurrentPlugin.InitSearch(различные_параметры)
}
catch(...)
{
CurrentPlugin.pPluginInstance == NULL;
}

Но все равно, если в функции у плагина InitSearch происходит деление на 0 - приложение рушится и просит в дебагер.


P.S. В Visual Studio нашел __try и __except - с помощью них заработало. Но очень хотелось бы кросплотформенное решение без применений "The try-except statement is a Microsoft extension to the C and C++ languages" мелкософтовских расширений.
Автор: Qraizer
Дата сообщения: 07.09.2007 12:15
К сожалению, стандарт не заставляет реализации отображать аппаратные ошибки и исключения в частности на механизм исключений C++. Так что единственным кроссплатформенным решением будет создание класса с переносимым интерфейсом и различной реализацией, где это надо.
Автор: distance
Дата сообщения: 07.09.2007 12:55
FlamingWind

Цитата:
необходимо, чтобы прога не крашилась даже в случае ошибки в функциях этих плагинов

интересная логика.. а если плагин вызовет format c: тоже нужно обеспечить работу программы?
для try/catch можно заюзать костыль
Автор: SergeiNG
Дата сообщения: 07.09.2007 16:32
Есть проблемка: пише сервер на с++ с использованием сокетов. На сервере создается сокет потом слушает. Клиентское ПО связывается и пересылает данные потом закрывает сокет. Так вот если клиентское ПО делает все эти действия все нормально. Но если Клиент посла данные и вырубился без закрытия сокета сервер в ауте - не позволяет к себе подконектиться. Может кто поможет?
пример сервера
main()
{
socket
bind
listen
accept
for(;;) - бесконечный цикл приема.
{ recv }
close
shutdown
}
Автор: rain87
Дата сообщения: 07.09.2007 17:59
SergeiNG
а ты принимаешь что ли только одного клиента? так что ж ты хотел? сервер будет у тебя бесконечно читать, пока не выйдет таймаут соединения (я так понимаю, что протокол ТСП?)

решение - сделать таймаут на отсутствие данных от клиента, т.е. если 10 секунд нет данных - то закрывать это соединение. или более правильно - для каждого клиента делать новый поток и он будет работать с клиентом, а сервер будет продолжать принимать клиентов
Автор: Qraizer
Дата сообщения: 07.09.2007 20:02
distance Этот "костыль" не решает главную проблему - кроссплатформенность. А раз так, то легко попадает под вариант реализации предложенного мною интерфейса. Впрочем, вполне жизнеспособен как пример реализации на Win32. Вот только классом вокруг окаймить.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.