Блин, я чайник. Пишу прогу на срр. Выдаётся ошибка, причём ссылается на внутренний код. Мне кажется, что всё дело в том, что я выделяю много памяти. Есть какие-нибудь ограничения на размер выделяемой памяти?
» Вопросы по программированию на C/С++
Ограничения впринципе есть. Ты лучше напиши что именно не равится компмилятору.
Обрывает работу проги и пишет в мелком окошке:
Fault: access violation at 0x40f4f8: write of address 0x8.
А потом: выдаёт окошко CPU. Вот подругому не могу.
Fault: access violation at 0x40f4f8: write of address 0x8.
А потом: выдаёт окошко CPU. Вот подругому не могу.
TeXpert
Цитата:
но в целом конечно да
Добавлено:
taraslis
код дай, если не очень большой
Цитата:
Microsoft успел так основательно деформировать сознание многих -- к слову, ты не замечал, что уже так часто там, где следует писать "/", уже пишут "\" (Добавить/удалить)?я наоборот часто пишу c:/path/
но в целом конечно да
Добавлено:
taraslis
код дай, если не очень большой
Terran888
Цитата:
Цитата:
Как написать что-то нормальное для Win16?Как обычно, как пишутся другие программы. Повторюсь в третий раз -- в этом случае ты можешь даже стереть сам исполняемый файл ("самоуничтожающаяся" программа).
Мне нужен 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
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
Цитата:
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)
Zyava
Вот и спрашиваю может кто скомпилит. Там не так уж и много дела, но у меня не всё есть, а Microsoft DirectX 9.0c Software Development Kit я скачать не могу.
Вот и спрашиваю может кто скомпилит. Там не так уж и много дела, но у меня не всё есть, а Microsoft DirectX 9.0c Software Development Kit я скачать не могу.
Здравствуйте. Я пишу программу, работающую с БД Access. У меня получается так, что при каждом обращении к функции, которая непосредственно обращается к БД происходит подключение, открытие и закрытие БД, что сказывается на скорости работы программы. Вот вопрос, можно ли один раз открыть БД, а в конце работы программы просто закрыть ее. Т.е. что б процесс открытия/закрытия происходил один раз, а "знали" об этом все функции...
Цитата:
Блин, я чайник. Пишу прогу на срр. Выдаётся ошибка, причём ссылается на внутренний код. Мне кажется, что всё дело в том, что я выделяю много памяти.
код приведи.
taraslis
Ну еще бы привел хотя бы платформу. Похоже в памяти чего-то мудришь - перетираешь код данными. Код приведи.
Ну еще бы привел хотя бы платформу. Похоже в памяти чего-то мудришь - перетираешь код данными. Код приведи.
Всем привет!
Подскажите, можно ли как нибудь определить, что параметр, переданный как char *, содержит ошибку - например, нет символа окончания строки.
Нужно как-то защиту от "дурака" построить. Сейчас при попытке чтения - ошибка доступа к памяти...
Буду очень благодарен ...
Подскажите, можно ли как нибудь определить, что параметр, переданный как char *, содержит ошибку - например, нет символа окончания строки.
Нужно как-то защиту от "дурака" построить. Сейчас при попытке чтения - ошибка доступа к памяти...
Буду очень благодарен ...
wolganin
Ну так просканируй этот буфер на наличие этого символа
Ну так просканируй этот буфер на наличие этого символа
wolganin
в порядке убывания приоритетов
1. передавать std::string
2. передавать не только char, но и size_t
3. SEH
в порядке убывания приоритетов
1. передавать std::string
2. передавать не только char, но и size_t
3. SEH
wolganin
В догонку к distance
4. Возьми BoundsChecker.
Вообще то странно. Эту штуку надо проверять ДО входа в функцию а не после. По идее, если ты используешь char*, то ты даже сказать не сможешь размер того, что тебе надо проверить, где ты вообще терминирующий нуль искать будешь?
Если проблема в перетирании буфера - самое оно какой-нибудь сторонней утилитой это проверить.
В догонку к distance
4. Возьми BoundsChecker.
Вообще то странно. Эту штуку надо проверять ДО входа в функцию а не после. По идее, если ты используешь char*, то ты даже сказать не сможешь размер того, что тебе надо проверить, где ты вообще терминирующий нуль искать будешь?
Если проблема в перетирании буфера - самое оно какой-нибудь сторонней утилитой это проверить.
Посоветуйте кроссплатформенную библиотеку на C++ для работы с xml в виде DOM-дерева. (необходимо сгенерировать xml-ку).
KADABRA
Я сам не юзал, но посмотри Xerces-C++
Я сам не юзал, но посмотри Xerces-C++
народ извените за тупой вопрос (все когдато начинали).Так вот штобы открыть среду для Visual C++ надо открыть файл danim.dll,а перед этим его зарегестрировать,я зарегестрировал но файл не открывается, выскакивает выбор програм.Я конешно туплю но всеравно не понимаю как открыть среду!!
Еще раз извените за тупой вопрос!
Еще раз извените за тупой вопрос!
The Sith
я конечно не понимаю для чего тебе открывать эту длл
но если ты действительно хочешь запустить длл как программу то cmd-> rundll dll.
Но мне кажется ты сам не понимаешь свой вопрос.
чтобы открыть среду для Visual C++ надо запустить cmd и задать в нем все переменные окружения, как правило они находятся в специальном батнике.
При инсталляции все это автоматически настраивается
Если запустить визуальную среду- то просто запускай студию.
Если ты хочешь использовать длл в своей программе- это уже еще одна тема
и т.д.
я конечно не понимаю для чего тебе открывать эту длл
но если ты действительно хочешь запустить длл как программу то cmd-> rundll dll.
Но мне кажется ты сам не понимаешь свой вопрос.
чтобы открыть среду для Visual C++ надо запустить cmd и задать в нем все переменные окружения, как правило они находятся в специальном батнике.
При инсталляции все это автоматически настраивается
Если запустить визуальную среду- то просто запускай студию.
Если ты хочешь использовать длл в своей программе- это уже еще одна тема
и т.д.
СП,навена нашел левый туториал(
Добавлено:
terminat0r
получается што эксешник среды есть где то в виндоус, но как его запустить если незнаешь пути к нему ни даже названия?
Добавлено:
terminat0r
получается што эксешник среды есть где то в виндоус, но как его запустить если незнаешь пути к нему ни даже названия?
The Sith
А в меню "Пуск/Программы" что, ссылок не создалось после установки? Или у тебя там такой хаос, что ты их найти не можешь (как со мной иногда бывает) ?
А в меню "Пуск/Программы" что, ссылок не создалось после установки? Или у тебя там такой хаос, что ты их найти не можешь (как со мной иногда бывает) ?
The Sith
Цитата:
Цитата:
Если печь идёт о 6-й версии, то его действительно можно использовать без инсталляции, только надо кое-что настроить (каталоги INCLUDE и другие, это легко). В этом случае надо запустить из каталога COMMON\MSDEV98\BIN msdev.exe, или msdev.com, которые запускают среду.
Цитата:
...все когдато начиналиПоверь мне, ты круче всех начал). Во-первых, о какой версии идёт речь?
Цитата:
...штобы открыть среду для Visual C++ надо открыть файл danim.dllОткуда дровишки, то бишь такая информация? И зачем что-то регистрировать?
Если печь идёт о 6-й версии, то его действительно можно использовать без инсталляции, только надо кое-что настроить (каталоги INCLUDE и другие, это легко). В этом случае надо запустить из каталога COMMON\MSDEV98\BIN msdev.exe, или msdev.com, которые запускают среду.
сп за помощь...а дравишки навена точно левые!)
vshersh
Спасибо, похоже на то что нужно. Буду разбиратся.
Спасибо, похоже на то что нужно. Буду разбиратся.
Вопрос по 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" мелкософтовских расширений.
Есть модуль, подгружающий некоторые плагины из заданного каталога. Модуль пишу я, плагины - кто угодно.
Модуль последовательно у всех плагинов директории вызывает некоторые функция и необходимо, чтобы прога не крашилась даже в случае ошибки в функциях этих плагинов (деление на 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" мелкософтовских расширений.
К сожалению, стандарт не заставляет реализации отображать аппаратные ошибки и исключения в частности на механизм исключений C++. Так что единственным кроссплатформенным решением будет создание класса с переносимым интерфейсом и различной реализацией, где это надо.
FlamingWind
Цитата:
интересная логика.. а если плагин вызовет format c: тоже нужно обеспечить работу программы?
для try/catch можно заюзать костыль
Цитата:
необходимо, чтобы прога не крашилась даже в случае ошибки в функциях этих плагинов
интересная логика.. а если плагин вызовет format c: тоже нужно обеспечить работу программы?
для try/catch можно заюзать костыль
Есть проблемка: пише сервер на с++ с использованием сокетов. На сервере создается сокет потом слушает. Клиентское ПО связывается и пересылает данные потом закрывает сокет. Так вот если клиентское ПО делает все эти действия все нормально. Но если Клиент посла данные и вырубился без закрытия сокета сервер в ауте - не позволяет к себе подконектиться. Может кто поможет?
пример сервера
main()
{
socket
bind
listen
accept
for(;;) - бесконечный цикл приема.
{ recv }
close
shutdown
}
пример сервера
main()
{
socket
bind
listen
accept
for(;;) - бесконечный цикл приема.
{ recv }
close
shutdown
}
SergeiNG
а ты принимаешь что ли только одного клиента? так что ж ты хотел? сервер будет у тебя бесконечно читать, пока не выйдет таймаут соединения (я так понимаю, что протокол ТСП?)
решение - сделать таймаут на отсутствие данных от клиента, т.е. если 10 секунд нет данных - то закрывать это соединение. или более правильно - для каждого клиента делать новый поток и он будет работать с клиентом, а сервер будет продолжать принимать клиентов
а ты принимаешь что ли только одного клиента? так что ж ты хотел? сервер будет у тебя бесконечно читать, пока не выйдет таймаут соединения (я так понимаю, что протокол ТСП?)
решение - сделать таймаут на отсутствие данных от клиента, т.е. если 10 секунд нет данных - то закрывать это соединение. или более правильно - для каждого клиента делать новый поток и он будет работать с клиентом, а сервер будет продолжать принимать клиентов
distance Этот "костыль" не решает главную проблему - кроссплатформенность. А раз так, то легко попадает под вариант реализации предложенного мною интерфейса. Впрочем, вполне жизнеспособен как пример реализации на Win32. Вот только классом вокруг окаймить.
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
Предыдущая тема: не знаю как назвать тему :-)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.