а насчёт листинга это просто - я знаю что в листинге нет ошибки, а вот что где то я использовал не ту функцию что надо, это другой вопрос :) Обид вообще нет, просто если б я знал ЧТО и ГДЕ искать, вообще не задавал бы таких вопросов :)
всё равно всем спасибо ... на эту страничку меня уже 3 раз посылают, пора мне задуматься :)
Программирую в Microsoft Visual C++ .NET. Прииспользовании printf получаю ошибку
Access violation reading location 0x00000004 подскажите плз, что делать???
Парен, я printf() не пользуюсь и то знаю, что ей переменные...01.07.05 13:57 Автор: d87 Статус: Незарегистрированный пользователь
> Парен, я printf() не пользуюсь и то знаю, что ей переменные > надо передавть &var, т.е. если > int x; > то printf(&x); А не слышал ли ты этот звон в контесте совсем другой фукнции? scanf например.
Проверять надо то, что ты предлагаешь перед тем, как предлагать
100% ты пытаешься обратиться по недопустимому адресу.20.06.05 08:42 Автор: Vedrus <Serokhvostov Anton> Статус: Member
100% ты пытаешься обратиться по недопустимому адресу.
Скорее всего в качестве параметра printf'у передан указатель
на строку, в области памяти к которой закрыт доступ на чтение
На самом деле вариантов не много25.05.05 16:06 Автор: PS <PS> Статус: Elderman
Вопрос абсолютно дуратский, но ответить на него можно и без кода... и даже самому без форума.
Есть только три варианта из-за которого на ф-ии printf можно получить Access violation
1. Не валидный параметр, переданный ф-ии. Например printf( 0, 0 );
2. Проблемы с линковкой. Например, программа может сыпаться в самых неожиданных местах если линковать dubug и release, multythread и singlthread библиотеки.
3. "Сбой по памяти" - тоже проявляется совсем не там, где он реально есть. Так что, если в программе есть работа с указателями, то вполне возможно - ошибка совсем не в printf();
Это очень легко детектировать поставив в произвольных местах штук 100 printf("hello!\n"); Если ошибка в этом месте изчезла - значит "память" (почти шутка).
> Программирую в Microsoft Visual C++ .NET. Прииспользовании > printf получаю ошибку > Access violation reading location > 0x00000004 > подскажите плз, что делать???
тут все написано:24.05.05 00:43 Автор: Killer{R} <Dmitry> Статус: Elderman
я ни как разобраться не могу, манав нет, а MSDN в сети рыть не вариант, инет ведь не казёный :(
проверки переменной, что в вывод передаю, пробовал тоже не проходят, та же ошибка.
если не сложно подскажите плз что сделать, или может что подробнее описать :)
Вообще то в VS.Net есть встроенный отладчик25.05.05 13:35 Автор: amirul <Serge> Статус: The Elderman
> если не сложно подскажите плз что сделать, или может что > подробнее описать :) Который перехватывает все exception-ы и останавливает отлаживаемую программу на строке, которая попыталась сделать чего то неправильное. Далее смотри stack trace и чего ты там выложил на стек
И кстати, что за обиды. Тебя попросили, прожевать чего ты там жуешь и внятно объяснить чего ты делаешь и чего ожидаешь.
Что делать: Вычислить фрагмент программы, где происходит...25.05.05 09:37 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
> если не сложно подскажите плз что сделать, или может что > подробнее описать :)
Что делать: Вычислить фрагмент программы, где происходит ошибка (найти эту функцию/процедуру). Воспользовавшись отладочной печатью локализовать место вплоть до одного оператора. Выражение с этим оператором выложить здесь.
мне вот просто интересно...25.05.05 00:07 Автор: dl <Dmitry Leonov> Отредактировано 25.05.05 00:10 Количество правок: 1
...как можно надеяться получить ответ на вопрос об ошибке в программе, не приводя ни строчки кода.
За неимением телепатических способностей могу лишь предположить, что в результате чего-то типа copy/paste из списка параметров scanf в printf попал какой-нибудь &i, так что функция и бросилась писать в район нулевых адресов.
действительно порой смешно...24.05.05 23:44 Автор: leo <Леонид Юрьев> Статус: Elderman
а насчёт листинга это просто - я знаю что в листинге нет ошибки, а вот что где то я использовал не ту функцию что надо, это другой вопрос :) Обид вообще нет, просто если б я знал ЧТО и ГДЕ искать, вообще не задавал бы таких вопросов :)
всё равно всем спасибо ... на эту страничку меня уже 3 раз посылают, пора мне задуматься :)
Не поделу:01.07.05 16:56 Автор: void <Grebnev Valery> Статус: Elderman Отредактировано 01.07.05 16:58 Количество правок: 1
> а насчёт листинга это просто - я знаю что в листинге нет > ошибки, а вот что где то я использовал не ту функцию что > надо, это другой вопрос :) Обид вообще нет, просто если б я > знал ЧТО и ГДЕ искать, вообще не задавал бы таких вопросов > :) > > всё равно всем спасибо ... на эту страничку меня уже 3 раз > посылают, пора мне задуматься :)
Не поделу:
1) Зря обижаешься.
2) Не смотря на "смехотворность" вопроса, вопрос об уязвимостях кода, в котором используется printf - это один из первых вопросов, что задают на интервью (при поиске работы), или в письменных тестах (чтоб попасть на сие интервью).
По делу:
1) То, что ты проверил соответствие параметров тем, что указаны в строке форматирования - это несомненно.
2) Если ты формируешь строку форматирования в рантайм (не константа) - ты, конечно же, проверил, что это та строка, что тебе надо.
3) Если ты выводишь нуль-терминировнные стоки - ты, конечно же, гарантирвал себя, что указателивалидные а строкитерминированные В противном случае, ты, конечно же, используешь "безопасный" вывод строк, указывая в строке форматированиядлинустроки.
4) Если ты используешь UNICODE, то, конечно же, используешь или юникодные версии, или выполняешь соответствующие преобразования UNICODE-ANSI.