РЕДАКТИРОВАТЬ: Уважаемые будущие читатели, std :: string не имеет никакого отношения к проблеме.Это был неопределенный массив.
В двух словах, проблема состоит в том, что добавление объявления одной std :: string в программу, которая в противном случае содержит только C, вызывает ошибку «Место чтения нарушения доступа 0xfffffffffffffffe.»
В приведенном ниже коде, если строка, в которой объявлена std :: string, закомментирована, программа завершается без ошибок.Однако, если строка остается в программе (без комментариев), программа завершает работу с вышеуказанной ошибкой нарушения доступа.Когда я открываю запущенную программу в отладчике VS2010, при обращении к ldap_search_sA () произошло нарушение прав доступа.
Обратите внимание, что объявленная std :: string никогда не используется.Это не должно использоваться, чтобы вызвать нарушение прав доступа.Простое объявление об этом приведет к нарушению прав доступа.
Я подозреваю, что это не имеет ничего общего с кодом LDAP, но я могу ошибаться.
int main()
{
try {
// Uncommenting the next line causes an Access Violation
// at the call to ldap_search_sA().
// std::string s;
LDAP* pLdapConnection = ldap_initA("eu.scor.local", LDAP_PORT);
ULONG version = LDAP_VERSION3;
ldap_set_option(pLdapConnection, LDAP_OPT_PROTOCOL_VERSION, (void*) &version);
ldap_connect(pLdapConnection, NULL);
ldap_bind_sA(pLdapConnection, NULL, NULL, LDAP_AUTH_NTLM);
LDAPMessage* pSearchResult;
PCHAR pMyAttributes[2];
pMyAttributes[0] = "cn";
pMyAttributes[1] = "description";
ldap_search_sA(pLdapConnection, "dc=eu,dc=scor,dc=local", LDAP_SCOPE_SUBTREE, "objectClass=computer)", pMyAttributes, 0, &pSearchResult);
} catch (...) {
printf("exception\n");
}
return 0;
}