Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ioscat
1 / 1 / 0
Регистрация: 07.05.2014
Сообщений: 44
#1

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

25.07.2014, 15:49. Просмотров 681. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2014, 15:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Релиз консольной программы с SNMP запросами - найти ошибку в коде (C++):

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

Неожиданное поведение программы: найти ошибку в коде - C++
Программа запрашивает у пользователя «Сколько Вам лет?» . Вы вводите положительное число до 100. Программа должна выдать пол-ный ответ «...

Нужно найти ошибку в коде программы по нахождению площади треугольника - C++
Вот код: #include &quot;StdAfx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { int...

Найти и устранить ошибку в коде программы, возникающую при сортировке самодельного списка - C++
Доброго времени суток! Сделал сортировку, при отладке видно, что он сортирует, но в конце выбивает ошибку, помогите, пожалуйста. ...

Вычислить и вывести значение суперпозиции функций (неожиданное поведение программы: найти ошибку в коде) - C++
Вот смотрите, есть условие задачи: ввести произвольные значения х, i (номер варианта 20), a, b, c, d можно задать как сталые и вычислить...

Неожиданное поведение программы: исправить ошибку в коде - C++
извиняюсь за возможно глупый вопрос, но почему программа говорит,что в выделенной строке ошибка? хотел написать в ней: а в квадрате + в в...

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

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

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

Люди, будьте добры, подскажите, пожалуйста, правильно ли я получаю версию программы для распространения?
Она у меня всего 20 КБ, а ведь по идее надо в неё включить библиотеки, объявленные в начале... Так ведь?
0
28.07.2014, 10:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 10:40
Привет! Вот еще темы с ответами:

нужно исправить ошибку, кто знает какая, напишите ее в новом коде программы - C++
нужно исправить ошибку, кто знает какая напишите ее в новом коде программы? #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include...

Найти сумму целых отрицательных чисел удовлетворяющих условию (найти и исправить ошибку в коде) - C++
#include&lt;iostream&gt; #include&lt;math.h&gt; using namespace std; int main() { int y = 0; for(int i = -21; i &lt; -99; i+=3) ...

Найти ошибку в коде - C++
Помогите пожалуйста найти ошибку в коде: #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt; int main() ...

Найти ошибку в коде - C++
пожалуйста найдите ошибку((( #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; #define FALSE 0 ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.