Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44

Релиз консольной программы с SNMP запросами - найти ошибку в коде

25.07.2014, 15:49. Показов 1820. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!

Я написал программку, которая опрашивает некоторые устройства используя запросы по протоколу SNMP. Программа отлично работает при Start without debugging, но её релизная версия спотыкается в самом начале, а именно при первом запросе. Прошу тыкнуть, где я мог что-то сделать неправильно?

Релизную версию получаю запуском Build->Batch build->...

Код программы:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <string>
#include <iostream>
#include <thread>
#include <Windows.h>
 
#include <iomanip>
 
#include <Mgmtapi.h>
#include <Snmp.h>
#include <SDKDDKVer.h>
#include <stdio.h>
#include <tchar.h>
#include <sstream>
#include <fstream>
#include <Winbase.h>
 
#pragma comment(lib, "Snmpapi.lib")
#pragma comment(lib, "Mgmtapi.lib")
 
using namespace std;
 
int main()
{
 
    cout << "Hello Owrld!" << "\n";
    
    LPSTR OID = ".1.3.6.1.2.1.1.1.0";
 
    SNMPAPI bx=0;
    SnmpVarBind OIDvarbind={0};
    SnmpMgrStrToOid (OID, &OIDvarbind.name);
    OIDvarbind.value.asnType = ASN_NULL;    
    cout << OIDvarbind.value.asnType << "\n";
    SnmpVarBindList OIDvarbindlist={0};
    OIDvarbindlist.len=1;
    OIDvarbindlist.list = (SnmpVarBind *) SnmpUtilMemAlloc (OIDvarbindlist.len*sizeof(SnmpVarBind));
    OIDvarbindlist.list=&OIDvarbind;
    
    int IPArraySize=5;
    LPSTR *IPArray=new LPSTR [IPArraySize];
    for (int i=0;i<IPArraySize;i++)
    {
        IPArray[i]="";
    }
    IPArray[0]="X.X.X.Y";
    IPArray[1]="X.X.X.Z";
 
 
    LPSNMP_MGR_SESSION *SNMPSessionArr = new LPSNMP_MGR_SESSION[IPArraySize];
    for(int i=0;i<IPArraySize;i++)
    {
        cout << "i is: " << i << " --> " << "IP is: " << IPArray[i] << "\n";
        
        SNMPSessionArr[i]=SnmpMgrOpen(IPArray[i], "private", 500, 0);
 
        AsnInteger errStatus = SNMP_ERRORSTATUS_NOERROR;
        AsnInteger errIndex = 0;
 
        cout << "i is: " << i << " --> " << "Gonna send request!" << "\n";
 
        bx=SnmpMgrRequest (SNMPSessionArr[i], SNMP_PDU_GET, &OIDvarbindlist, &errStatus, &errIndex);
 
        cout << "i is: " << i << " --> " << "Request sent!" << "\n";
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.07.2014, 15:49
Ответы с готовыми решениями:

Найти ошибку в коде программы
Сегодня начал изучать систему ввода-вывода в C# и тестируя методы столкнулся с небольшой проблемой(все видно на скрине) мой глупенький и...

Найти ошибку в коде программы
Народ, посмотрите пожалуйста на код, оператор break не прекращает перебор вариантов case и выводит все варианты от введенного номера a. ...

Найти ошибку в коде программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

7
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44
27.07.2014, 11:26  [ТС]
up!

Парни, должно быть что-то простейшее же, типа залинковать что-то?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
27.07.2014, 15:21
ioscat, хотите ответа - давайте подробные и осмысленные
описания ошибок. "Спотыкается" - это непонятно что.
0
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44
28.07.2014, 06:42  [ТС]
ну, гм, прерывается и всё. "Программа завершена" - это сообщение высвечивается при запуске ЕХЕ из папки Release. Как получить дополнительную информацию?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
28.07.2014, 08:58
Цитата Сообщение от ioscat Посмотреть сообщение
Как получить дополнительную информацию?
Для начала сделать нормальную обработку ошибок.
Ну например, в коде есть вызов SnmpMgrOpen, но не проверяется, что
он возвращает. А ведь функция может возвращать NULL, и тогда код
ошибки можно прочесть из GetLastError. Ну и т.д.
Так Вы будете хотя бы знать, в каком месте ошибка. Ну а дальше уже
можно будет разбираться почему.
0
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44
28.07.2014, 09:35  [ТС]
При отладке выдаёт:
Unhandled exception at 0x7762E753 (ntdll.dll) in StrcutTry.exe: 0xC0000374: Куча была повреждена (parameters: 0x77664270).
в строке
bx=SnmpMgrRequest (SNMPSessionArr[i], SNMP_PDU_GET, &OIDvarbindlist, &errStatus, &errIndex);
Как можно получить значения ошибки из функции, если само выполнение этой функции приводит к выводу программы из строя?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
28.07.2014, 10:35
SnmpMgrOpen что возвращает? Ты проверяешь что он возвращает не NULL ?
0
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44
28.07.2014, 10:40  [ТС]
Неа, поставлю проверку обязательно!
Спасибо за совет!
А как лучше сделать, через IF или TRY/CATCH?

-----------------
Решил проблему тем, что перенёс выделение памяти выше на несколько строк, поставил перед вот этим блоком
SNMPAPI bx=0;
SnmpVarBind OIDvarbind={0};
SnmpMgrStrToOid (OID, &OIDvarbind.name);
OIDvarbind.value.asnType = ASN_NULL;
---------------

Люди, будьте добры, подскажите, пожалуйста, правильно ли я получаю версию программы для распространения?
Она у меня всего 20 КБ, а ведь по идее надо в неё включить библиотеки, объявленные в начале... Так ведь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.07.2014, 10:40
Помогаю со студенческими работами здесь

Зацикливание программы, найти ошибку в коде
#define EE 1E-80 #define MAX_ROOTS 15 typedef struct { Complex root; int nor; // number of root int deg; // degree }...

Не могу найти ошибку в коде программы
Лабу задали, сам в программировании ничегошеньки вот уважаемые данный код ---------------------------- Public Sub...

Найти ошибку в коде расчетной программы
Написал маленьку расчетную программу. но она почему то всегда выдает ноль. Помогите разобраться, что я не так сделал. Private Sub...

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

Phonon при компиляции релиз программы выдает ошибку
При релиз компиляции phonon выдает вот такие ошибки (1 скрин) Вот код реализации : music = new VideoPlayer(); ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru