Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 31.01.2012
Сообщений: 21

Системное программирование (Побегайло): ошибка в коде или влияние извне?

14.12.2015, 14:57. Показов 1142. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не понятно, в чем заключается причина ругани VS на попытку исполнения кода 4.8(Завершение потока в родительском процессе, который передается через командную строку):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <windows.h>
#include <conio.h>
 
int main(int argc, char *argv[])
{
  HANDLE  hThread;
  char  c;
 
  // преобразуем символьное представление дескриптора в число
  hThread = (HANDLE)atoi(argv[1]);
  // ждем команды о завершении потока
  while (true)
  {
    _cputs("Input 't' to terminate the thread: ");
    c = _getch();
    if (c == 't')
    {
      _cputs("t\n");
      break;
    }
  }
  // завершаем поток
  TerminateThread(hThread, 0);
  // закрываем дескриптор потока
  CloseHandle(hThread);
 
  _cputs("Press any key to exit.\n");
  _getch();
 
  return 0;
}
Пробовал и в VS2008, и в vc++6. Билдится и там и там, но при попытке запуска в первом случае меня кроют сообщениями типа
Debug Assertion Failed!

Program: ...\User\Мои документы\Visual Studio 2008\Projects\1\Debug\1.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\s trtol.c
Line: 94

Expression: nptr != NULL

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)"

и посылают в дебри. Исходя из ошибки предположил что причина в несоответствии кодировок или обьявлении (_tmain вместо main), потому изменил в проекте юникод на анси,. Как можно догадаться, мало что изменилось. В VC++ 6 картина мало чем отличалась, но на этот раз инструкция по адресу 401259 обратилась к памяти 0000000. В общем, без понятия, что пошло не так
И раз на то пошло, может объясните, куда указывает f:\dd\vctools\crt_bld\self_x86\crt\src\s trtol.c
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2015, 14:57
Ответы с готовыми решениями:

Анонимные каналы "Системное программирование в Windows" (А. Побегайло)
Здравствуйте. Читаю книгу &quot;Системное программирование в Windows&quot; (А. Побегайло). Добрался до 15 главы &quot;Работа с анонимными...

Выбор кафедры в дальнейшей жизни: прикладное программирование VS системное программирование
Сразу извиняюсь что очень не по теме но всё же лучшего форума для этого вопроса я не нашел. Итак я вступаю во взрослую жизнь и давно...

Ошибка в примере из книжки Побегайло
Начал изучать WinAPI, переписал пример из книжки Побегайло, компилирую, выдает 2 ошибки: error LNK1120: 1 unresolved externals error...

4
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
14.12.2015, 15:43
Цитата Сообщение от starche Посмотреть сообщение
но при попытке запуска
А при попытке запуска ты передаешь аргумент программе? Почему ты делаешь atoi на argv[1] не проверяя, что аргумент вообще есть?
0
0 / 0 / 0
Регистрация: 31.01.2012
Сообщений: 21
14.12.2015, 15:52  [ТС]
опечатка была... на argv[0] все заработало
Почему ты делаешь atoi на argv[1] не проверяя, что аргумент вообще есть?
не совсем понял как его может не быть, если как я понял то в argv указывается полный путь к самому файлу, то есть он ссылается на себя же. А если я и неправ, то не знаю как это можно проверить.
p.s. может побегайло не самый лучший вариант для начинающих? рихтер пока тяжеловато идет, что еще есть подобного?
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
14.12.2015, 15:55
Цитата Сообщение от starche Посмотреть сообщение
не совсем понял как его может не быть, если как я понял то в argv указывается полный путь к самому файлу
Указатель на путь к файлу только в argv[0], а не в argv[1].
Цитата Сообщение от starche Посмотреть сообщение
А если я и неправ, то не знаю как это можно проверить.
argc параметр, наверное, для соседа сверху передается.

Добавлено через 57 секунд
Цитата Сообщение от starche Посмотреть сообщение
опечатка была... на argv[0] все заработало
Опечатка в программе - ошибка.
Скомпилировалось, а не заработало. Вместо хэндла, ты пытаешься в число превратить путь к файлу.
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
14.12.2015, 20:43
Цитата Сообщение от starche Посмотреть сообщение
все заработало
starche, TerminateThread при ошибке возвращает 0. (Если успешно, то возвращает положительное число ). Что у Вас возвращает TerminateThread ?
C++
1
2
  BOOL result = TerminateThread(hThread, 0);
  DWORD err = GetLastError();
Добавлено через 4 минуты
Цитата Сообщение от starche Посмотреть сообщение
Не понятно, в чем заключается причина
Возможная причина, что пустая командная строка. argc ( arguments count ) - число параметров командной строки. starche, чему у Вас равняется argc ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.12.2015, 20:43
Помогаю со студенческими работами здесь

Системное программирование
Добрый день! Начала изучать системное программирование, но не могу нигде найти простенькие задачи по нему. Подскажите, пожалуйста, задачи,...

Системное программирование
Давно интересует меня такой вопрос, имею книгу &quot;Системное программирование в Windows&quot; (автор Александр Побегайло). Хотелось бы...

Системное программирование
Всем привет! Если я не там тему создал, прошу указать верную. Есть проблемы с предметом &quot;Системное программирование&quot;....

Системное программирование
Всем привет. Где можно найти все ф-ий по С и их краткое описание под Линукс. Что то похожее на man . Подскажите пожалуйста, может...

Системное программирование. Направления
Здравствуйте! Подскажи какие есть направления в системном программировании под Windows. Какие из них востребованы на рынке (интересует в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru